<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="https://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
>
    <channel>
                    <atom:link rel="alternate" hreflang="en-GB"
                       href="https://www.tomsguide.com/uk/feeds/tag/tech"
                       type="application/rss+xml"/>
                            <title><![CDATA[ Latest from Tom's Guide UK in Tech ]]></title>
                <link>https://www.tomsguide.com/uk/tech</link>
        <description><![CDATA[ All the latest tech content from the Tom's Guide  UK team ]]></description>
                                    <lastBuildDate>Thu, 25 Jun 2026 11:10:15 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ Portable fans are this summer's must-have gadget, and here are 10 fans you can still buy ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/portable-fans-are-this-summers-must-have-gadget-and-here-are-the-fans-you-can-still-buy</link>
                                                                            <description>
                            <![CDATA[ Handheld fans are saving people from the sweltering heat right now, and these are the ones we recommend buying today. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">C2DtwHdCgvmmCsVvYA3N9S</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aNYcDXRpJEm5vzAqBGQAw4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 25 Jun 2026 11:10:15 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ peter.wolinski@futurenet.com (Peter Wolinski) ]]></author>                    <dc:creator><![CDATA[ Peter Wolinski ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/stgPfXWY7ukw8J8rfC7vjg.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Peter is a Senior Editor at Tom&#039;s Guide, heading up the site&#039;s Reviews team and Cameras section. Having built gaming PCs since he was 10 (that&#039;s a while ago now) he&#039;s a bit of a nerd about components and hardware. He&#039;s also been an iPhone user since the classic iPhone 4, and a Mac user for well over a decade. Experienced in using and testing all kinds of technology — from phones through to tablets, computers, games consoles, cameras and smart home tech — helping people find the best tech for them (at the best prices) is what Peter does best. A photographer since he bought his first camera (a Fujifilm) in 2015, Peter was previously an Editor for Canon-Europe.com. He then edited the Cameras and How To sections of Tom&#039;s Guide. When he&#039;s not crafting helpful, in-depth reviews, Peter can usually be found out and about honing his architectural photography skills, riding his motorcycle around Welsh mountain roads, telling everyone about his two greyhounds, squeezing a few extra FPS out of PC games or perfecting his espresso shots.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/aNYcDXRpJEm5vzAqBGQAw4-1280-80.jpg">
                                                            <media:credit><![CDATA[Sony, Shark, Warmco, Geepas, Epicka, Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A collage of handheld fans on a blue background]]></media:description>                                                            <media:text><![CDATA[A collage of handheld fans on a blue background]]></media:text>
                                <media:title type="plain"><![CDATA[A collage of handheld fans on a blue background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aNYcDXRpJEm5vzAqBGQAw4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>'Tis the season. No, not <em>that</em> season. I meant, 'tis the season for being absolutely sweltering, not getting any sleep, and being thoroughly unproductive. I live in the south west of England, and today it's going to hit 38 degrees. So, unsurprisingly, handheld fans are well and truly in.</p><p>As such, I've rounded up a few of my favourites here, in the likely scenario that you're searching for a new one. Happily, Amazon's <a href="https://www.tomsguide.com/live/news/savings-squad-prime-day-live-blog-amazon-best-buy-walmart">Prime Day deals</a> are helping out a little, with discounts on many fans at Amazon, although there are some deals at other retailers, like B&Q/DIY.</p><p>If you need a new fan, keep reading!</p><h2 class="article-body__section" id="section-9-portable-fan-deals-to-keep-you-cool-this-summer"><span>9 portable fan deals to keep you cool this summer</span></h2>        <div class="featured_product_block featured_block_horizontal" data-id="c85d7b16-ff85-499b-820f-4e53fe3ea8ee">            <a href="https://www.amazon.co.uk/REON-POCKET-Sensing-Wearable-Cooler/dp/B0CXCDZ1FW" data-model-name="Sony Reon Pocket 5" 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/JUgqmqkTCXFhbJN7wsG2AX.jpg" alt="Sony Reon Pocket 5 Sensing Kit, Wearable Cooler, Neck Cooler, Wearable Warmer, Neck Heater, Neck Warmer, Thermal Device, Portable Air Conditioner, Personal Cooling Device"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>REON POCKET</div>                                        <div class="featured__title">Sony Reon Pocket 5</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>The REON Pocket is one of our favourite cooling products, which cools you down using its thermal plates. Attach it to your neck for full body cooling.</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_horizontal" data-id="968d0903-24ba-4abe-bd47-3a2657e99ca4">            <a href="https://www.amazon.co.uk/Shark-High-Speed-Attachments-Travel-Friendly-FA022UKPK/dp/B0GKPQ4YC4/" data-model-name="Shark Chillpill 3-In-1" 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/3XqXmiqLADEtj365eZ87cd.jpg" alt="Shark Chillpill 3-In-1 Personal High-Speed Fan, Ultra-Fine Mist and Instachill System, Includes 3 Cooling Attachments, Travel-Friendly Design, Dragon Fruit Fa022ukpk"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Shark</div>                                        <div class="featured__title">Shark Chillpill 3-In-1</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Probably the most in-demand fan this season, the Chillpill is all over social. It combines a typical fan with a mist function and a cooling contact plate. It's expensive, but can you really put a price on staying comfortable?</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_horizontal" data-id="d689d940-576b-4464-b70d-3cb6b5fe6662">            <a href="https://www.amazon.co.uk/Warmco-Portable-Personal-Adjustable-Hands-Free/dp/B0GS6NZPJB" data-model-name="Warmco Portable Neck Fan" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/G86bA47Co4djTrVoczv3eS.jpg" alt="Warmco Portable Neck Fan, 5200mah Battery Powered Personal Fan With Led Display, Surround Cooling & 60° Adjustable Airflow, Strong Wind, Hands-Free Fan for Travel, Camping, Office"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Warmco</div>                                        <div class="featured__title">Warmco Portable Neck Fan</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Warmco is hitting the Amazon sales hard this Prime Day, including this portable neck fan. Wear it around your neck for full body cooling, as you can pitch the fans up and down to cool your face and body.</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_horizontal" data-id="7eb3a109-dd2d-4927-8e1a-9118b5d7c2af">            <a href="https://www.amazon.co.uk/Warmco-Portable-Handheld-Adjustable-Rechargeable/dp/B0F7KB3795/" data-model-name="Warmco Portable Handheld Fan" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/5AnjM6wZsHXvXrJYSVCqBR.jpg" alt="Warmco Portable Handheld Fan 5000mah, 1-100 Speed Stepless Turbo Fan (15000 Rpm), Small Personal Mini Fan With Led Display, Usb Rechargeable for Travel, Commuting, Office, Makeup & Eyelash Dry"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Warmco</div>                                        <div class="featured__title">Warmco Portable Handheld Fan</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>I actually own this fan, and it's been a life-saver while I'm out and about, especially on trips. Its very powerful, but at its lower settings will last a good few hours (and still provide plenty of cooling).</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_horizontal" data-id="869e5cfa-7d9f-40b0-9f28-1c95c477c84b">            <a href="https://www.amazon.co.uk/Portable-Handheld-Adjustable-Rechargeable-Essentials/dp/B0F6LLP9CR" data-model-name="Epicka Portable Handheld Fan" 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/3B2GzQuVpCFy6MLBVdLhUS.jpg" alt="Epicka Portable Handheld Fan, Speed(1-100) Adjustable Turbo Mini Fan,6800mah Battery Rechargeable Foldable Fan With Cooling Plate,digital Display,summer Outdoor Travel Essentials for Women Men - Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>EPICKA</div>                                        <div class="featured__title">Epicka Portable Handheld Fan</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Another handheld turbo jet fan, this one has a useful folding battery compartment, allowing you to prop it up and use it as a mini desk fan.</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_horizontal" data-id="730e4897-3ffc-4182-8077-bf1d8370ffb7">            <a href="https://www.amazon.co.uk/JISULIFE-Handheld-Powerbank-Rechargeable-Fan-White/dp/B09PDMZKQW" data-model-name="Jisulife Handheld Fan" 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/2NLifEnwYzGkgB5KAvFjYW.jpg" alt="Jisulife Handheld Fan With 4500 Mah Powerbank Max 37 Hours Runtime, Personal Portable Fan Pocket Usb Powered Folding and Mini Rechargeable Quiet -White"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>JISULIFE</div>                                        <div class="featured__title">Jisulife Handheld Fan</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>A classic handheld fan — no frills but probably just enough chills. And for under £15, this is a cost-effective solution.</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_horizontal" data-id="1714cf79-7867-4a87-8710-c1123b8be644">            <a href="https://www.amazon.co.uk/Warmco-10000mAh-Portable-Ultra-thin-Operated/dp/B0DNM5H1KP" data-model-name="Warmco 10000mah Portable Desk Fan" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CRs5dnY2d9X8QJeTkjf9ZQ.jpg" alt="Warmco 10000mah Portable Desk Fan 21cm, Up to 24h Runtime, Ultra-Slim Quiet Rechargeable Battery Operated Fan With Digital Display for Travel, Camping, Office, Bedroom, Cruise Essentials"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Warmco</div>                                        <div class="featured__title">Warmco 10000mah Portable Desk Fan</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Speaking of mini desk fans, Warmco has another deal on this USB-C desk fan which will be perfect for keeping cool at your workstation.</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_horizontal" data-id="0323c5f5-3f53-4a06-b1a9-481318e57a1f">            <a href="https://www.amazon.co.uk/Warmco-Control-Powered-Battery-Personal/dp/B0G4BVTN9J" data-model-name="Warmco Usb Desk Fan With Touch Control" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.33%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/89oMnw4v5HcBLA397NJjrP.jpg" alt="Warmco Usb Desk Fan With Touch Control, (usb Powered Only, No Battery) Small Personal Desktop Fan, Usb-A & Usb-C Plug, 3 Speeds Strong Airflow, Quiet Table Fans for Home Office Dorm"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Warmco</div>                                        <div class="featured__title">Warmco Usb Desk Fan With Touch Control</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Alternatively, if you're short on space or want something a little less (dare I say it) ugly than the fan above, there's also this sompact touch controlled Warmco fan on sale.</p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_horizontal" data-id="c6455eaf-f8d5-4c29-81eb-c889766464c6">            <a href="https://www.diy.com/departments/geepas-portable-neck-fan-3-speed-usb-charging-6hr-run-time-2000mah/6294015578065_BQ.prd" data-model-name="Neck fan" 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/ue7A9gotTBLWi8rN7vRxxC.jpg" alt="Geepas neck fan white background"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Geepas</div>                                        <div class="featured__title">Neck fan</div>                                    </div>                <div class="subtitle__description">                                                            <p><p>Another neck fan here, currently on sale at B&Q, it has three cooling modes and promises up to 6 hours of cooling.</p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-deals"><span>We're tracking all the best Prime Day deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=fans&min_discount_ratio=0.95&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=transparent" data-vizualizer-embed="true"></div>    <script>    /**     * Tom's Guide Deals Finder - Vanilla JS Encapsulated Engine     */    (function() {      // --- Freyr Analytics Adapter ---      function initAnalytics() {        window.dataLayer = window.dataLayer || [];        window.googletag = window.googletag || {};        window.googletag.cmd = window.googletag.cmd || [];        window.hawk = window.hawk || { analytics: { freyr: [] } };        window.hawk.analytics = window.hawk.analytics || { freyr: [] };        window.hawk.analytics.freyr = window.hawk.analytics.freyr || [];        window.freyr = window.freyr || { cmd: [] };        const scriptSrc = 'https://freyr.futurecdn.net/freyr.js';        const hostname = typeof window !== 'undefined' ? window.location.hostname : '';        const isTestEnv = typeof window.navigator !== 'undefined' && (window.navigator.webdriver || window.navigator.userAgent.includes('Headless'));        const shouldSendRealAnalytics = !isTestEnv && hostname && hostname !== 'localhost' && hostname !== '127.0.0.1' && !hostname.includes('run.app');        if (shouldSendRealAnalytics && !document.querySelector(`script[src="${scriptSrc}"]`)) {          const script = document.createElement('script');          script.src = scriptSrc;          script.async = true;          document.head.appendChild(script);        }      }      function storeEventForDebug(name, data) {        if (!window.hawk || !window.hawk.analytics || !window.hawk.analytics.freyr) return;        window.hawk.analytics.freyr.push({ name, data });        try {          if (typeof window !== 'undefined' && window.localStorage) {            window.localStorage.setItem("hawk", JSON.stringify(window.hawk));          }        } catch (e) {          // Ignore storage issues        }        try {          window.dispatchEvent(new CustomEvent("hawk-analytics-update"));        } catch (e) {}      }      function sendToFreyr(eventName, data) {        if (typeof window === 'undefined') return;        window.freyr = window.freyr || { cmd: [] };        window.freyr.cmd.push(() => {          if (window.freyr && window.freyr.pushAndUpdate) {            window.freyr.pushAndUpdate(eventName, data);          }        });      }      function sendEvent(event, skip = false) {        try {          storeEventForDebug(event.name, event.data);          if (!skip) {            sendToFreyr(event.name, event.data);          }        } catch (e) {          // Ensure tracking errors don't surface to the user        }      }      function getCookie(name) {        try {          const match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));          return match ? match[2] : null;        } catch (e) {          return null;        }      }      function normalizeCurrency(symbol) {        const map = {          '£': 'GBP',          '$': 'USD',          'A$': 'AUD',          'CA$': 'CAD',          '€': 'EUR'        };        return map[symbol] || symbol;      }      function trackElementInteraction(props) {        sendEvent({          name: 'elementInteraction',          data: {            element: {              action: props.action || "click",              id: props.id || undefined,              class: props.class || undefined,              name: props.name || undefined,              text: props.text || undefined,              label: props.label || undefined,              container: props.container || undefined,              url: props.url || undefined,              articleId: props.articleId || undefined            }          }        });      }      function generateRevenueId(url, productName, merchantName, modelId) {        const str = `${window.location.href}|${productName}|${merchantName}|${modelId || ''}|${new Date().toDateString()}|tomsguide`;        let hash = 0;        for (let i = 0; i < str.length; i++) {          const char = str.charCodeAt(i);          hash = ((hash << 5) - hash) + char;          hash = hash & hash;        }        let numericStr = Math.abs(hash).toString();        while (numericStr.length < 19) {          numericStr += Math.floor(Math.random() * 10).toString();        }        return numericStr.substring(0, 19);      }      function rewriteAffiliateLink(url, territory, revenueId) {        if (!url) return url;        const t = (territory || 'gb').toLowerCase();        return url.replace(/hawk-custom-tracking/g, `tomsguide-${t}-${revenueId}`);      }      function trackHawkEvent(params) {        const { clickType, widgetId, productCategoryName, product, productsArray, zeroBasedProductIndexOrNull, totalDealsOrProducts, areaClicked, merchant, revenueId, isoCurrencyCode, queryName, widgetTypeName } = params;        const data = {          event: "hawkEvent",          category: "Affiliates",          affiliate: {            action: {              type: clickType,              id: widgetId,              event: clickType === "appeared" ? "viewed" : "Click from",              timestamp: Date.now()            },            component: {              flag: "Editor",              product: productCategoryName || "deals",              category: `Signal Deal Finder ${widgetTypeName || "Carousel"} widget`,              type: clickType === "appeared" ? "review" : "signal product",              label: queryName || (product ? (product.name || "") : ""),              index: zeroBasedProductIndexOrNull === null || zeroBasedProductIndexOrNull === undefined ? -1 : zeroBasedProductIndexOrNull,              linkCount: totalDealsOrProducts || 0,              blockLayout: "",              areaClicked: areaClicked || ""            }          },          products: productsArray || (product && merchant ? [            {              product: {                primary: {                  id: product.id || product.matchId || null,                  name: product.name,                  type: "deal",                  price: product.price,                  previousPrice: product.previousPrice || null,                  currency: isoCurrencyCode || "USD",                  preorder: false,                  labels: [],                  link: product.link,                  originalLink: product.originalLink || null,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: null,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: product.globalId || null,                  inStock: product.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: isoCurrencyCode || "USD"                }              },              merchant: {                id: merchant.id || null,                name: merchant.name,                url: merchant.url || null,                network: merchant.network || null              },              model: {                id: product.modelId || null,                brand: product.brand || null,                name: product.name,                parent: product.parent || null              }            }          ] : []),          reviews: [],          _clear: true,          "gtm.uniqueEventId": Date.now() % 10000        };        sendEvent({ name: 'hawkEvent', data });      }      function trackDealClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card" });      }      function trackViewSimilarClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Product Card View Similar" });      }      function trackPriceComparisonClick(params) {        trackHawkEvent({ ...params, clickType: "retailer", areaClicked: "Signal Price Comparison" });      }      function trackReviewClick(params) {        trackHawkEvent({ ...params, clickType: "review", areaClicked: "Signal Product Card Review Link" });      }      function trackShare(params) {        trackHawkEvent({ ...params, clickType: "share", areaClicked: "Signal Product Card Share" });      }      function trackDealsAppeared(widgetId, deals, revenueId, currency, queryName, widgetTypeName) {         if (!deals || deals.length === 0) return;                  const productsArray = deals.slice(0, 50).map((deal) => {            let voucherPct = null;            let rawPrice = parseFloat(deal.rawPrice) || parseFloat(deal.price) || null;            let rawMsrp = parseFloat(deal.rawMsrp) || parseFloat(deal.msrp) || null;            if (rawMsrp > rawPrice && rawPrice > 0) {              voucherPct = Math.round((1 - (rawPrice / rawMsrp)) * 100);            }            let numId = null;            if (deal.externalProductId && !isNaN(parseInt(deal.externalProductId))) {              numId = parseInt(deal.externalProductId);            } else if (deal.id && !isNaN(parseInt(deal.id))) {              numId = parseInt(deal.id);            } else {              numId = deal.matchId || null;            }            return {              product: {                primary: {                  id: numId,                  name: deal.productName || deal.title || "",                  type: "deal",                  price: rawPrice,                  previousPrice: rawMsrp,                  currency: currency || 'USD',                  preorder: false,                  labels: deal.modelBrand || deal.brand ? [                     { type: "brand", value: deal.modelBrand || deal.brand }                  ] : [],                  link: deal.url,                  originalLink: deal.url,                  revenueId: revenueId || null,                  startTime: null,                  endTime: null,                  voucherCode: null,                  voucherAudience: null,                  voucherPercentageSaving: voucherPct,                  voucherMoneySaving: null,                  voucherType: null,                  offerExclusive: false,                  offerScope: null,                  globalId: deal.productKey || null,                  inStock: deal.inStock !== false,                  contractProvider: null,                  contractMinutes: null,                  contractTexts: null,                  contractData: null,                  contractLength: null,                  contractMonthlyPrice: null,                  contractCurrency: currency || 'USD'                }              },              merchant: {                id: deal.merchantId ? parseInt(deal.merchantId) : null,                name: deal.merchant || "Retailer",                url: deal.merchantUrl || null,                network: deal.merchantNetwork || null              },              model: {                id: deal.modelId ? parseInt(deal.modelId) : null,                brand: deal.modelBrand || deal.brand || null,                name: deal.productName || deal.title || "",                parent: deal.modelParent || null              }            };         });                  trackHawkEvent({             clickType: "appeared",             widgetId: widgetId,             productCategoryName: "deals",             zeroBasedProductIndexOrNull: null,             totalDealsOrProducts: deals.length,             productsArray: productsArray,             queryName: queryName,             widgetTypeName: widgetTypeName         });      }      // 1. Setup Shadow DOM Sandbox      const currentScript = document.currentScript;      let hostContainer = null;      let template = null;            if (currentScript) {        let prev = currentScript.previousElementSibling;        while (prev) {          if (prev.tagName === 'TEMPLATE' && prev.classList.contains('tg-df-widget-template')) {            template = prev;          } else if (prev.tagName === 'DIV' && prev.classList.contains('tg-df-widget-host') && !prev.hasAttribute('data-initialized')) {            hostContainer = prev;            break;          }          prev = prev.previousElementSibling;        }      }            // Fallbacks in case script is deferred      if (!hostContainer) {        const hosts = document.querySelectorAll('.tg-df-widget-host:not([data-initialized])');        if (hosts.length > 0) hostContainer = hosts[0];      }            // Safely embedded template for CMS environments      const rawTemplate = `  \x3Cstyle>    /* --- Shadow DOM Base Reset --- */    *, *::before, *::after {      box-sizing: border-box;    }    img, picture, svg, video {      max-width: 100%;      height: auto;      display: block;    }    /*       1. Scoped CSS for Tom's Guide Deals Widget       All classes are prefixed with \`tg-df-\` to prevent CMS style leakage.    */    .tg-df-container {      container-type: inline-size;      container-name: tg-df;      --tg-df-blue: #1F69FF;      --tg-df-blue-hover: #004d8c;      --tg-df-text: #222222;      --tg-df-text-muted: #555555;      --tg-df-bg: #ffffff;      --tg-df-bg-secondary: #f4f4f4;      --tg-df-border: #e2e8f0;      font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;      color: var(--tg-df-text);      background-color: transparent;       width: 100%;      max-width: 1200px;      margin: 0 auto;      padding-bottom: 24px;    }    .tg-df-container *, .tg-df-container *::before, .tg-df-container *::after {      margin: 0;      padding: 0;      box-sizing: border-box;    }    .tg-df-container img {      border: none;      margin: 0;      padding: 0;    }    .tg-df-container a {      text-decoration: none;      color: inherit;    }    /*       2. Search & Filter Bar    */    .tg-df-controls {      display: flex;      flex-direction: column;      align-items: center;      gap: 20px;      margin-bottom: 32px;      width: 100%;    }    .tg-df-top-bar {      display: flex;      width: 100%;      max-width: 760px;      gap: 12px;      align-items: center;    }    .tg-df-search-wrapper {      position: relative;      flex: 1;      width: 100%;      box-shadow: 0 8px 24px rgba(0,0,0,0.06);      border-radius: 40px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      z-index: 100;    }    .tg-df-autocomplete-dropdown {      position: absolute;      top: calc(100% + 4px);      left: 0;      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      max-height: 300px;      overflow-y: auto;      z-index: 200;      display: none;    }    .tg-df-autocomplete-dropdown.active {      display: block;    }    .tg-df-autocomplete-item {      padding: 12px 24px;      cursor: pointer;      font-size: 14px;      color: var(--tg-df-text);      transition: background 0.1s ease;    }    .tg-df-autocomplete-item:hover {      background: var(--tg-df-bg-secondary);    }    .tg-df-search-input {      width: 100%;      padding: 16px 64px 16px 24px;      font-size: 16px;      border: 2px solid transparent;      border-radius: 40px;      outline: none;      transition: border-color 0.2s ease, box-shadow 0.2s ease;      color: var(--tg-df-text);      background: transparent;    }    .tg-df-search-input:focus {      border-color: transparent;      box-shadow: 0 0 0 3px rgba(0, 108, 196, 0.15);    }    .tg-df-search-input::placeholder {      color: #999999;    }        .tg-df-search-btn {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      width: 40px;      height: 40px;      border-radius: 50%;      background: #222;      border: none;      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: background 0.2s ease;    }        .tg-df-search-btn:hover {      background: #000;    }    .tg-df-search-icon {      width: 16px;      height: 16px;      fill: #fff;    }    .tg-df-settings-wrapper {      position: relative;    }        .tg-df-settings-btn {      width: 48px;      height: 48px;      border-radius: 50%;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      box-shadow: 0 4px 12px rgba(0,0,0,0.04);      display: flex;      align-items: center;      justify-content: center;      cursor: pointer;      transition: all 0.2s ease;      color: var(--tg-df-text-muted);      flex-shrink: 0;    }    .tg-df-settings-btn:hover {      background: var(--tg-df-bg-secondary);      border-color: #0000ff;      color: var(--tg-df-text);    }    .tg-df-settings-btn svg {      width: 24px;      height: 24px;      fill: currentColor;    }    .tg-df-settings-dropdown {      position: absolute;      top: calc(100% + 8px);      right: 0;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 12px;      box-shadow: 0 8px 32px rgba(0,0,0,0.12);      width: 280px;      padding: 20px;      display: none;      z-index: 100;      flex-direction: column;      gap: 20px;    }    .tg-df-settings-dropdown.active {      display: flex;    }        .tg-df-settings-dropdown-backdrop {      display: none;      position: fixed;      inset: 0;      z-index: 99;    }        .tg-df-settings-dropdown-backdrop.active {      display: block;    }    .tg-df-setting-item {      display: flex;      flex-direction: column;      gap: 10px;    }    .tg-df-setting-label {      font-size: 11px;      font-weight: 700;      color: var(--tg-df-text-muted);      text-transform: uppercase;      letter-spacing: 0.5px;    }        .tg-df-region-select {        padding: 10px 12px;        border-radius: 8px;        border: 1px solid var(--tg-df-border);        font-size: 15px;        outline: none;        background: var(--tg-df-bg-secondary);        color: var(--tg-df-text);        cursor: pointer;        width: 100%;    }    .tg-df-toggle {        position: relative;        display: inline-block;        width: 44px;        height: 24px;        flex-shrink: 0;    }    .tg-df-toggle input {        opacity: 0;        width: 0;        height: 0;    }    .tg-df-slider {        position: absolute;        cursor: pointer;        top: 0; left: 0; right: 0; bottom: 0;        background-color: #ccc;        transition: .2s;        border-radius: 24px;    }    .tg-df-slider:before {        position: absolute;        content: "";        height: 18px;        width: 18px;        left: 3px;        bottom: 3px;        background-color: white;        transition: .2s;        border-radius: 50%;    }    .tg-df-toggle input:checked + .tg-df-slider {        background-color: #1F69FF;    }    .tg-df-toggle input:checked + .tg-df-slider:before {        transform: translateX(20px);    }    .tg-df-dl-row {        flex-direction: row;        align-items: center;        justify-content: space-between;    }    .tg-df-dl-row-text {        font-size: 14px;        font-weight: 600;        color: var(--tg-df-text);    }    .tg-df-dl-row-subtext {        font-size: 12px;        font-weight: 400;        line-height: 1.3;        color: var(--tg-df-text-muted);        margin-top: 4px;        display: block;    }    .tg-df-filters {      display: flex;      gap: 12px;      justify-content: center;      flex-wrap: wrap;    }    .tg-df-sort-wrapper {      position: relative;      display: flex;      align-items: center;    }        .tg-df-sort-icon {      position: absolute;      left: 14px;      width: 14px;      height: 14px;      fill: var(--tg-df-text-muted);      pointer-events: none;    }    .tg-df-sort-select, .tg-df-filter-select {      padding: 10px 36px 10px 38px;      font-size: 14px;      border: 1px solid var(--tg-df-border);      border-radius: 100px;      outline: none;      appearance: none;      background-color: var(--tg-df-bg-secondary);      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'%3E%3Cpath fill='%23555555' d='M6 8L1 3h10z'/%3E%3C/svg%3E");      background-repeat: no-repeat;      background-position: right 14px center;      color: var(--tg-df-text);      cursor: pointer;      font-weight: 500;      transition: all 0.2s ease;    }        .tg-df-price-input::-webkit-outer-spin-button,    .tg-df-price-input::-webkit-inner-spin-button {      -webkit-appearance: none;      margin: 0;    }    .tg-df-price-input {      -moz-appearance: textfield;    }    .tg-df-sort-select:hover, .tg-df-filter-select:hover {      background-color: #e2e8f0;    }    .tg-df-multiselect-container {      position: relative;    }        .tg-df-multiselect-trigger {      display: block;      background: #fff;      user-select: none;      width: 100%;      overflow: hidden;      white-space: nowrap;      text-overflow: ellipsis;    }        .tg-df-multiselect-dropdown {      display: none;      position: absolute;      top: calc(100% + 4px);      left: 0;      width: 100%;      min-width: 220px;      max-height: 300px;      overflow-y: auto;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;      box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);      z-index: 100;      padding: 8px 0;    }    .tg-df-multiselect-dropdown.active {      display: block;    }    .tg-df-ms-option {      padding: 8px 16px;      display: flex;      align-items: center;      gap: 8px;      cursor: pointer;      font-size: 14px;    }    .tg-df-ms-option:hover {      background-color: var(--tg-df-bg-secondary);    }        .tg-df-ms-option input {      cursor: pointer;      accent-color: #1f69ff;    }    .tg-df-sort-select:focus, .tg-df-filter-select:focus {      border-color: #0000ff;      box-shadow: 0 0 0 3px rgba(0, 0, 255, 0.2);      background-color: var(--tg-df-bg);    }    /*       3. Deal Grid Layout    */    .tg-df-grid.tg-df-grid-auto {      padding-top: 24px;    }    .tg-df-grid, .tg-df-grid.layout-grid {      display: grid;      grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));      gap: 10px;    }    .tg-df-grid.layout-row {      grid-template-columns: 1fr;      gap: 16px;    }        .tg-df-grid.layout-row .tg-df-card {      flex-direction: row;      align-items: stretch;      height: auto;      box-shadow: none;      border-bottom: 1px solid var(--tg-df-border);    }    .tg-df-grid.layout-row .tg-df-card:hover {      box-shadow: none;    }    .tg-df-grid.layout-row .tg-df-card-image-box {      width: 140px;      min-width: 140px;      aspect-ratio: 3/4;      border-right: none;      padding: 16px 16px 16px 32px;    }    .tg-df-grid.layout-row .tg-df-card-body {      padding: 16px;      justify-content: space-between;    }    .tg-df-grid.layout-row .tg-df-card-title {      font-size: 15px;      margin-bottom: 16px;    }    .tg-df-grid.layout-row .tg-df-card-stars { margin-bottom: 8px; }    .tg-df-grid.layout-row .tg-df-card-footer {      flex-direction: column;      align-items: flex-start;      gap: 0;    }    .tg-df-grid.layout-row .tg-df-card-merchant-pill {      margin-bottom: 4px;    }    .tg-df-grid.layout-row .tg-df-card-price-group {      margin-bottom: 8px;    }    .tg-df-grid.layout-row .tg-df-price-group {      width: auto;    }    .tg-df-grid.layout-row .tg-df-card-cta {      width: 100%;      max-width: 200px;      padding: 10px 24px;      font-size: 13px;      flex-shrink: 0;      text-align: center;      justify-content: center;    }    /*       4. Deal Card Design    */    .tg-df-card {      position: relative;      display: flex;      flex-direction: column;      background-color: #ffffff;      border-radius: 0;      overflow: hidden;      transition: transform 0.2s ease, box-shadow 0.2s ease;      text-decoration: none;      color: inherit;      height: 100%;      box-shadow: 0 0 16px rgba(0, 0, 0, 0.08);      border: 1px solid var(--tg-df-border);    }    .tg-df-card:hover {      box-shadow: 0 0 24px rgba(0, 0, 0, 0.12);    }    .tg-df-card-image-box {      width: 100%;      aspect-ratio: 3/4;      background-color: #f8f8f8;      display: flex;      align-items: center;      justify-content: center;      position: relative;      overflow: hidden;      padding: 32px;      flex: 0 0 auto;    }    .tg-df-card-image {      max-width: 100%;      max-height: 100%;      width: auto;      height: auto;      object-fit: contain;      mix-blend-mode: multiply; /* Helps white background images blend into secondary bg */      transition: transform 0.3s ease;    }    .tg-df-card:hover .tg-df-card-image {      transform: scale(1.05); /* Zoom in on hover */    }    .tg-df-card-discount-badge {      position: absolute;      top: 12px;      left: 12px;      background: #dc2626; /* Red */      color: #ffffff;      padding: 6px 8px;      font-size: 11px;      font-weight: 500;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      z-index: 10;    }        .tg-df-card-merchant-pill {      display: block;      padding: 0;      font-size: 11px;      font-weight: 600;      text-transform: uppercase;      letter-spacing: 0.5px;      border-radius: 0;      color: var(--tg-df-text-muted);      margin-bottom: 8px;      white-space: nowrap;      overflow: hidden;      text-overflow: ellipsis;    }    .tg-df-card-body {      padding: 16px;      display: flex;      flex-direction: column;      flex-grow: 1;      min-width: 0;    }    .tg-df-card-badges {      display: flex;      flex-wrap: wrap;      gap: 6px;      margin-bottom: 8px;    }    .tg-df-tag {      display: inline-flex;      align-items: center;      padding: 4px 6px;      font-size: 11px;      font-weight: 700;      text-transform: uppercase;      border-radius: 4px;      gap: 4px;    }    .tg-df-tag-prime {      background-color: #00A8E1;      color: #fff;    }    .tg-df-tag-coupons {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-coupons:hover {      background-color: #e2e8f0;    }        .tg-df-tag-outline {      background-color: #f1f5f9;      color: #334155;      border: 1px solid #cbd5e1;      cursor: pointer;      transition: background-color 0.2s;    }    .tg-df-tag-outline:hover {      background-color: #e2e8f0;    }        @keyframes tg-df-spin {      0% { transform: rotate(0deg); }      100% { transform: rotate(360deg); }    }    .tg-df-coupon-spinner {      border: 2px solid #e2e8f0;      border-top: 2px solid #3b82f6;      border-radius: 50%;      width: 14px;      height: 14px;      animation: tg-df-spin 1s linear infinite;      margin: 4px 8px;      display: inline-block;    }        /* Vouchers Modal */    .tg-df-modal-backdrop {      position: fixed;      top: 0; left: 0; right: 0; bottom: 0;      background: rgba(0,0,0,0.5);      z-index: 10000;      display: flex;      align-items: center;      justify-content: center;      opacity: 0;      pointer-events: none;      transition: opacity 0.3s;    }    .tg-df-modal-backdrop.active {      opacity: 1;      pointer-events: auto;    }    .tg-df-modal {      background: #fff;      border-radius: 12px;      width: 90%;      max-width: 400px;      max-height: 80vh;      display: flex;      flex-direction: column;      box-shadow: 0 10px 40px rgba(0,0,0,0.2);      transform: translateY(20px);      transition: transform 0.3s;    }    .tg-df-modal-backdrop.active .tg-df-modal {      transform: translateY(0);    }    .tg-df-modal-header {      padding: 16px;      border-bottom: 1px solid #e2e8f0;      display: flex;      align-items: center;      justify-content: space-between;    }    .tg-df-modal-title {      font-size: 16px;      font-weight: 600;      margin: 0;    }    .tg-df-modal-close {      background: none;      border: none;      cursor: pointer;      padding: 4px;      color: #64748b;    }    .tg-df-modal-body {      padding: 16px;      overflow-y: auto;    }    .tg-df-voucher-item {      padding: 12px;      border: 1px dashed #cbd5e1;      border-radius: 8px;      margin-bottom: 10px;      background: #f8fafc;      display: flex;      align-items: center;      gap: 12px;      text-decoration: none;      color: inherit;      transition: background-color 0.2s, border-color 0.2s;    }    .tg-df-voucher-item:hover {      background: #f1f5f9;      border-color: #94a3b8;    }    .tg-df-voucher-item:last-child {      margin-bottom: 0;    }    .tg-df-voucher-logo {      width: 48px;      height: 48px;      object-fit: contain;      border-radius: 4px;      background: #fff;      border: 1px solid #e2e8f0;      flex-shrink: 0;    }    .tg-df-voucher-content {      flex: 1;      min-width: 0;    }    .tg-df-voucher-title {      font-size: 14px;      font-weight: 600;      margin: 0 0 4px 0;      line-height: 1.3;      color: #0f172a;    }    .tg-df-voucher-expiry {      font-size: 12px;      color: #64748b;      display: flex;      align-items: center;      gap: 4px;      margin-top: 6px;    }    .tg-df-voucher-code {      display: inline-flex;      align-items: center;      background: #f1f5f9;      border: 1px dashed #cbd5e1;      padding: 6px 10px;      font-family: monospace;      font-weight: 700;      font-size: 14px;      color: #0f172a;      border-radius: 4px;      margin-top: 8px;      cursor: pointer;      transition: all 0.2s ease;    }    .tg-df-voucher-code:hover {      background: #e2e8f0;      border-color: #94a3b8;    }    .tg-df-voucher-code.copied {      background: #ecfdf5;      border-color: #10b981;      color: #10b981;    }    .tg-df-voucher-cta {      display: inline-block;      margin-top: 8px;      font-size: 13px;      font-weight: 600;      color: #2563eb;      text-decoration: none;    }    .tg-df-card-title {      font-size: 15px;      font-weight: 400;      line-height: 1.4;      margin: 0 0 12px 0;      color: var(--tg-df-text);      display: -webkit-box;      -webkit-line-clamp: 2;      -webkit-box-orient: vertical;      overflow: hidden;    }    .tg-df-card-footer {      margin-top: auto;      display: flex;      flex-direction: column;      width: 100%;    }    .tg-df-card-price-group {      display: flex;      flex-direction: row;      align-items: center;      gap: 8px;      margin-bottom: 12px;    }    .tg-df-card-price {      font-size: 16px;      font-weight: 700;      color: #dc2626; /* Red price */      line-height: 1;    }        .tg-df-card-msrp {      font-size: 13px;      color: var(--tg-df-text-muted);      text-decoration: line-through;    }    .tg-df-container .tg-df-card-cta {      display: flex;      align-items: center;      justify-content: center;      width: 100%;      box-sizing: border-box;      background-color: #1f69ff;      color: #ffffff;      font-size: 12px;      font-weight: 700;      text-transform: uppercase;      letter-spacing: 0.5px;      padding: 12px 16px;      border-radius: 0;      border: none;      cursor: pointer;      transition: background-color 0.2s ease;    }    .tg-df-card:hover .tg-df-card-cta,    .tg-df-card-cta:hover {      background-color: #1555cc;    }    .tg-df-container .tg-df-card-cta.tg-df-cta-savings-squad {      background-color: #3c8d0d;    }    .tg-df-card:hover .tg-df-card-cta.tg-df-cta-savings-squad,    .tg-df-card-cta.tg-df-cta-savings-squad:hover {      background-color: #2b6509;    }    /*       5. State & Skeleton Styles    */    .tg-df-message {      grid-column: 1 / -1;      text-align: center;      padding: 48px 24px;      color: var(--tg-df-text-muted);      font-size: 16px;      background: var(--tg-df-bg);      border: 1px solid var(--tg-df-border);      border-radius: 8px;    }    @keyframes tg-df-shimmer {      0% { background-position: -200% 0; }      100% { background-position: 200% 0; }    }    .tg-df-skeleton {      background: linear-gradient(90deg, var(--tg-df-bg-secondary) 25%, #e2e8f0 50%, var(--tg-df-bg-secondary) 75%);      background-size: 200% 100%;      animation: tg-df-shimmer 1.5s infinite;      border-radius: 4px;    }    .tg-df-skeleton-img {      width: 100%;      height: 100%;      position: absolute;      top: 0; left: 0;    }        .tg-df-skeleton-text {      height: 16px;      margin-bottom: 8px;      width: 100%;    }    .tg-df-skeleton-text.short { width: 40%; }    .tg-df-skeleton-text.title { height: 20px; margin-bottom: 16px; }    /* Editor Floating Bar & Elements */    .tg-df-editor-bar {      position: sticky;      top: 0;      z-index: 1000;      background: #111827;      color: #fff;      padding: 12px 16px;      border-radius: 8px;      margin-bottom: 16px;      display: flex;      align-items: center;      justify-content: space-between;      box-shadow: 0 4px 12px rgba(0,0,0,0.15);    }    .tg-df-editor-bar-text {      font-weight: 600;      font-size: 14px;    }    .tg-df-editor-copy-btn {      background: #10b981;      color: #fff;      padding: 6px 16px;      border: none;      border-radius: 4px;      font-weight: 600;      cursor: pointer;      display: flex;      align-items: center;      font-size: 13px;    }    .tg-df-editor-copy-btn:hover { background: #059669; }        .tg-df-deal-checkbox {      position: absolute;      top: 12px;      right: 12px;      z-index: 10;      width: 20px;      height: 20px;      cursor: pointer;      pointer-events: auto;    }    /*       6. Mobile List View (Stacks into a cleaner horizontal row/list)    */    @container tg-df (max-width: 599px) {      .tg-df-controls {        padding: 0 16px;      }            .tg-df-top-bar {        width: 100%;      }            .tg-df-settings-dropdown {        position: fixed;        top: auto;        bottom: 0;        left: 0;        right: 0;        width: 100%;        border-radius: 20px 20px 0 0;        padding: 24px;        box-shadow: 0 -8px 32px rgba(0,0,0,0.15);        z-index: 1000;        border: none;        border-top: 1px solid var(--tg-df-border);      }            .tg-df-settings-dropdown-backdrop.active {        background: rgba(0,0,0,0.4);      }            .tg-df-search-wrapper {        box-shadow: 0 0 16px rgba(0,0,0,0.08);      }            .tg-df-filters {        width: calc(100% + 32px);        margin: 0 -16px;        padding: 0 16px 4px 16px;        display: flex;        justify-content: flex-start;        gap: 8px;        flex-wrap: nowrap;        overflow-x: auto;        -webkit-overflow-scrolling: touch;        scrollbar-width: none;      }      .tg-df-filters::after {        content: "";        display: block;        flex: 0 0 8px;      }      .tg-df-filters::-webkit-scrollbar {        display: none;      }            .tg-df-sort-wrapper {        flex: 0 0 max(42%, 130px);        min-width: 0;      }      .tg-df-sort-wrapper.tg-df-price-range-wrapper {        flex: 0 0 auto;        min-width: max-content;      }            .tg-df-sort-select, .tg-df-filter-select {        width: 100%;        text-align: left;        padding: 10px 24px 10px 32px;        background-position: right 8px center;        text-overflow: ellipsis;        white-space: nowrap;        overflow: hidden;      }      .tg-df-sort-icon {        left: 10px;      }      .tg-df-grid:not(.layout-grid):not(.layout-row),      .tg-df-grid.layout-row {        grid-template-columns: 1fr;        gap: 16px;      }            .tg-df-grid.tg-df-grid-auto {        padding-top: 24px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card,      .tg-df-grid.layout-row .tg-df-card {        flex-direction: row;        align-items: stretch;        height: auto;        box-shadow: none; /* simple line on mobile if preferred, or keep */        border-bottom: 1px solid var(--tg-df-border);      }      .tg-df-grid.tg-df-grid-auto .tg-df-card:hover,      .tg-df-grid.layout-row .tg-df-card:hover {        box-shadow: none;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-image-box,      .tg-df-grid.layout-row .tg-df-card-image-box {        width: 120px;        min-width: 120px;        aspect-ratio: 3/4;        border-right: none;        padding: 12px;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-body,      .tg-df-grid.layout-row .tg-df-card-body {        padding: 12px;        justify-content: space-between;      }      .tg-df-grid.tg-df-grid-auto .tg-df-card-title,      .tg-df-grid.layout-row .tg-df-card-title {        font-size: 14px;        margin-bottom: 12px;        -webkit-line-clamp: 3;      }      /* Single column mobile grid override */      .tg-df-grid.layout-grid {        grid-template-columns: 1fr;        gap: 16px;      }      .tg-df-grid.layout-grid .tg-df-card-image-box {        padding: 12px;      }      .tg-df-grid.layout-grid .tg-df-card-body {        padding: 10px;      }      .tg-df-grid.layout-grid .tg-df-card-title {        font-size: 13px;        -webkit-line-clamp: 3;        margin-bottom: 8px;      }      .tg-df-grid.layout-grid .tg-df-card-price {        font-size: 14px;      }            .tg-df-card-footer {        flex-direction: column;        align-items: stretch;        gap: 0;        width: 100%;        min-width: 0;      }      .tg-df-card-merchant-pill {        margin-bottom: 4px;      }      .tg-df-card-price-group {        flex: 1 1 auto;        margin-bottom: 8px;      }      .tg-df-card-price {        font-size: 16px;      }      .tg-df-card-msrp {        display: block;       }      .tg-df-grid.layout-row .tg-df-card-cta,      .tg-df-container .tg-df-card-cta {        width: 100%;        max-width: none;        min-width: 0;        box-sizing: border-box;        padding: 8px 16px;        font-size: 12px;        flex: 0 0 auto;        text-align: center;        white-space: normal;        line-height: 1.2;      }    }    .tg-df-container.is-carousel {      min-height: 760px;      background-color: #E7F0FF;      padding: 0 0 24px 0;      border-radius: 24px;    }    .tg-df-container.is-carousel.hide-header-details {      min-height: 480px;    }    /*       7. Carousel View Mode    */    .tg-df-container .tg-df-carousel-host {      /* Layout is now handled by container wrapper */    }    .tg-df-container .tg-df-carousel-eyebrow {      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      padding: 24px 16px 0 16px;      display: none;    }    .tg-df-container .tg-df-carousel-query-title {      color: #011535;      font-size: 28px;      font-weight: 600;      padding: 0 16px 24px 16px;      line-height: 1.2;      display: none;    }    .tg-df-container .tg-df-carousel-blue-box {      background-color: transparent;      border-radius: 0;      padding: 24px 24px 0 24px;      margin: 0;      color: #1F69FF;          position: relative;      overflow: hidden;    }    .tg-df-container .tg-df-carousel-bg-circle-1 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-2 {      display: none;    }    .tg-df-container .tg-df-carousel-bg-circle-3 {      display: none;    }    .tg-df-container .tg-df-carousel-box-content {      position: relative;      z-index: 10;    }    .tg-df-container .tg-df-carousel-box-eyebrow {      background-color: transparent;      color: #1F69FF;      font-weight: 700;      font-size: 14px;      text-transform: uppercase;      letter-spacing: 1px;      display: inline-block;      padding: 0;      border-radius: 0;    }    .tg-df-container .tg-df-carousel-box-title {      font-size: 28px;      font-weight: 600;      line-height: 1.2;      margin-top: 8px;      color: #1e293b;    }    .tg-df-container .tg-df-countdown-wrapper {      position: absolute;      top: 0;      right: 0;      display: flex;      flex-direction: column;      align-items: flex-end;      gap: 12px;      transform: scale(0.67);      transform-origin: top right;    }    .tg-df-container .tg-df-countdown-title {      font-size: 16px;      text-align: center;      width: 100%;      font-weight: 600;      color: #011535;      margin: 0;    }    .tg-df-container .tg-df-countdown-blocks {      display: flex;      gap: 16px;    }    .tg-df-container .tg-df-countdown-item {      display: flex;      flex-direction: column;      align-items: center;      gap: 4px;    }    .tg-df-container .tg-df-countdown-box {      width: 59px;      height: 59px;      background: #03FE9E;      border-radius: 15px;      display: flex;      align-items: center;      justify-content: center;    }    .tg-df-container .tg-df-countdown-num {      font-family: 'Inter', sans-serif;      font-weight: 700;      font-size: 20px;      line-height: normal;      color: #011535;    }    .tg-df-container .tg-df-countdown-label {      font-family: 'Inter', sans-serif;      font-weight: 500;      font-size: 16px;      line-height: normal;      color: #1e293b;      text-transform: uppercase;    }    .tg-df-container .tg-df-carousel-box-subtitle {      font-size: 16px;      margin-top: 8px;      font-weight: 300;      color: #1e293b;      line-height: 24px;    }    .tg-df-container .tg-df-carousel-roundels-wrapper {      position: relative;      margin-top: 24px;      margin-left: -24px;      margin-right: -24px;    }    .tg-df-container .tg-df-carousel-roundels {      display: flex;      gap: 16px;      overflow-x: auto;            scrollbar-width: none;      padding-top: 12px;      padding-bottom: 24px;      padding-left: 24px;      padding-right: 24px;      margin-left: 0;      margin-right: 0;    }        .tg-df-container .tg-df-carousel-scroll-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 { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button: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';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const 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');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, 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.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been building Lego sets for more than 40 years, and these are the 15 Prime Day Lego deals I'd get ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/ive-been-building-lego-sets-for-more-than-40-years-and-these-are-the-15-prime-day-lego-deals-id-get</link>
                                                                            <description>
                            <![CDATA[ I found 15 Prime Day Lego deals that I'd either buy for myself or for a kid's present. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">W4g2BhjRww6FDATbK4CsXR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/V7a6i6JVFNubhCURXLqkRf-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 23 Jun 2026 15:14:24 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ mike.prospero@futurenet.com (Mike Prospero) ]]></author>                    <dc:creator><![CDATA[ Mike Prospero ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/6ZM8mX4UwccqDJTh9gLPqV.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Michael A. Prospero is the U.S. Editor-in-Chief for Tom’s Guide. He oversees all evergreen content and oversees the Homes, Smart Home, and Fitness/Wearables categories for the site. In his spare time, he also tests out the latest drones, electric scooters, and smart home gadgets, such as video doorbells. Before his tenure at Tom&#039;s Guide, he was the Reviews Editor for Laptop Magazine, a reporter at Fast Company, the Times of Trenton, and, many eons back, an intern at George magazine. He received his undergraduate degree from Boston College, where he worked on the campus newspaper The Heights, and then attended the Columbia University school of Journalism. When he’s not testing out the latest running watch, electric scooter, or skiing or training for a marathon, he’s probably using the latest sous vide machine, smoker, or pizza oven, to the delight — or chagrin — of his family.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/V7a6i6JVFNubhCURXLqkRf-1280-80.jpg">
                                                            <media:credit><![CDATA[Lego]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Lego R2-D2]]></media:description>                                                            <media:text><![CDATA[Lego R2-D2]]></media:text>
                                <media:title type="plain"><![CDATA[Lego R2-D2]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/V7a6i6JVFNubhCURXLqkRf-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Yet another Prime Day has arrived, and with it come lots of sales on Lego sets, which makes it a good — not great — time to stock up. Sadly, some of the bigger sets, like the Star Wars UCS or the full-size F1 sets, aren't on sale, which will disappoint many AFOLs.</p><p>However, a lot of the less-expensive sets are discounted somewhat, so if you're planning ahead for a kid's birthday or some other event, now is a good time to look around. The Lego Speed Champions Ferrari SF-24 F1 set, which is now just <a href="https://www.amazon.com/LEGO-Speed-Champions-Ferrari-SF-24/dp/B0DHLHWZT7" target="_blank" rel="nofollow">$21 on Amazon</a>, is a great example.</p><p>I'm still combing through all of the Lego deals, so this is a list of 15 I like so far; I'm partial to a lot of Lego cars, which is why you'll see a lot of those deals in this roundup, as well as Star Wars-themed sets. But, we have a neat little deal finder at the bottom of the page, which scours the web for all the best Lego deals — and saves you the trouble of having to go to Amazon.</p><h3 class="article-body__section" id="section-cars"><span>Cars</span></h3><div class="product"><a data-dimension112="611137e6-0176-4d13-b69d-20d8b4a9278d" data-action="Deal Block" data-label="All of the Lego Speed Champions kits are on sale, but I've always been partial to Ferrari's livery, so I'm highlighting this model here." data-dimension48="All of the Lego Speed Champions kits are on sale, but I've always been partial to Ferrari's livery, so I'm highlighting this model here." data-dimension25="$21" href="https://www.amazon.com/LEGO-Speed-Champions-Ferrari-SF-24/dp/B0DHLHWZT7" 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:99.93%;"><img id="7QmgNiJrmVE7cXf5gdNace" name="81SIAvPac3L._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7QmgNiJrmVE7cXf5gdNace.jpg" mos="" align="middle" fullscreen="" width="1500" height="1499" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>All of the Lego Speed Champions kits are on sale, but I've always been partial to Ferrari's livery, so I'm highlighting this model here. <a class="view-deal button" href="https://www.amazon.com/LEGO-Speed-Champions-Ferrari-SF-24/dp/B0DHLHWZT7" target="_blank" rel="nofollow" data-dimension112="611137e6-0176-4d13-b69d-20d8b4a9278d" data-action="Deal Block" data-label="All of the Lego Speed Champions kits are on sale, but I've always been partial to Ferrari's livery, so I'm highlighting this model here." data-dimension48="All of the Lego Speed Champions kits are on sale, but I've always been partial to Ferrari's livery, so I'm highlighting this model here." data-dimension25="$21">View Deal</a></p></div><div class="product"><a data-dimension112="918babbf-1afb-469d-ad9b-5bfce576f91d" data-action="Deal Block" data-label="The full-size Ferrari models aren't on sale, but this smaller set is perfect for kids who want a taste of what's to come. This 837-piece kit has working butterfly doors, an opening hood, and an engine cover that opens." data-dimension48="The full-size Ferrari models aren't on sale, but this smaller set is perfect for kids who want a taste of what's to come. This 837-piece kit has working butterfly doors, an opening hood, and an engine cover that opens." data-dimension25="$51" href="https://www.amazon.com/LEGO-Technic-Ferrari-FXX-Kids/dp/B0DRW6KZKF/" 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="wmvTpMaaXxwG673dQej4YA" name="Technic Ferrari FXX K" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/wmvTpMaaXxwG673dQej4YA.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The full-size Ferrari models aren't on sale, but this smaller set is perfect for kids who want a taste of what's to come. This 837-piece kit has working butterfly doors, an opening hood, and an engine cover that opens.<a class="view-deal button" href="https://www.amazon.com/LEGO-Technic-Ferrari-FXX-Kids/dp/B0DRW6KZKF/" target="_blank" rel="nofollow" data-dimension112="918babbf-1afb-469d-ad9b-5bfce576f91d" data-action="Deal Block" data-label="The full-size Ferrari models aren't on sale, but this smaller set is perfect for kids who want a taste of what's to come. This 837-piece kit has working butterfly doors, an opening hood, and an engine cover that opens." data-dimension48="The full-size Ferrari models aren't on sale, but this smaller set is perfect for kids who want a taste of what's to come. This 837-piece kit has working butterfly doors, an opening hood, and an engine cover that opens." data-dimension25="$51">View Deal</a></p></div><div class="product"><a data-dimension112="b742c078-e223-4ee1-bf2f-0236000e567e" data-action="Deal Block" data-label="Here's another offer for the Ferrari lover in your life. While an actual Ferrari F40 might set you back anywhere from two to four million dollars, this Lego replica will barely cost you more than a twenty-spot. And of course, it comes in the brand's legendary Racing Red color." data-dimension48="Here's another offer for the Ferrari lover in your life. While an actual Ferrari F40 might set you back anywhere from two to four million dollars, this Lego replica will barely cost you more than a twenty-spot. And of course, it comes in the brand's legendary Racing Red color." data-dimension25="$21" href="https://www.amazon.com/LEGO-Champions-Supercar-Minifigure-Collectible/dp/B0CV27Y7ZT/" 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="airedale-paZVr6QDcXdZSNayz9epo9-2" name="Speed Champions Ferrari F40.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4ARiJgCKn6ioEtWzm38SSg.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Here's another offer for the Ferrari lover in your life. While an actual Ferrari F40 might set you back anywhere from two to four million dollars, this Lego replica will barely cost you more than a twenty-spot. And of course, it comes in the brand's legendary Racing Red color. <a class="view-deal button" href="https://www.amazon.com/LEGO-Champions-Supercar-Minifigure-Collectible/dp/B0CV27Y7ZT/" target="_blank" rel="nofollow" data-dimension112="b742c078-e223-4ee1-bf2f-0236000e567e" data-action="Deal Block" data-label="Here's another offer for the Ferrari lover in your life. While an actual Ferrari F40 might set you back anywhere from two to four million dollars, this Lego replica will barely cost you more than a twenty-spot. And of course, it comes in the brand's legendary Racing Red color." data-dimension48="Here's another offer for the Ferrari lover in your life. While an actual Ferrari F40 might set you back anywhere from two to four million dollars, this Lego replica will barely cost you more than a twenty-spot. And of course, it comes in the brand's legendary Racing Red color." data-dimension25="$21">View Deal</a></p></div><div class="product"><a data-dimension112="a54484c7-5918-42a1-adcd-7d9a8f968625" data-action="Deal Block" data-label="This 1:12 scale model has a V6 engine with moving pistons, independent suspension on all wheels and front-axle steering." data-dimension48="This 1:12 scale model has a V6 engine with moving pistons, independent suspension on all wheels and front-axle steering." data-dimension25="$95" href="https://www.amazon.com/LEGO-Technic-42154-Model-Adults/dp/B0BLJ38RJR?" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1462px;"><p class="vanilla-image-block" style="padding-top:102.60%;"><img id="btFYW2vtqgiqgoBUSEXrZU" name="Technic 2022 Ford GT" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/btFYW2vtqgiqgoBUSEXrZU.jpg" mos="" align="middle" fullscreen="" width="1462" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This 1:12 scale model has a V6 engine with moving pistons, independent suspension on all wheels and front-axle steering. <a class="view-deal button" href="https://www.amazon.com/LEGO-Technic-42154-Model-Adults/dp/B0BLJ38RJR?" target="_blank" rel="nofollow" data-dimension112="a54484c7-5918-42a1-adcd-7d9a8f968625" data-action="Deal Block" data-label="This 1:12 scale model has a V6 engine with moving pistons, independent suspension on all wheels and front-axle steering." data-dimension48="This 1:12 scale model has a V6 engine with moving pistons, independent suspension on all wheels and front-axle steering." data-dimension25="$95">View Deal</a></p></div><div class="product"><a data-dimension112="b18c2af2-9bea-48bc-b958-399d6e835c5d" data-action="Deal Block" data-label="The second movie in the "Fast &amp; Furious" saga may not have been the best (though certainly better than "Toyko Drift") but it did get us a look at the Skyline GT-R, one of the best cars from the whole series. And, this Lego set even lets you drift the car." data-dimension48="The second movie in the "Fast &amp; Furious" saga may not have been the best (though certainly better than "Toyko Drift") but it did get us a look at the Skyline GT-R, one of the best cars from the whole series. And, this Lego set even lets you drift the car." data-dimension25="$111" href="https://www.amazon.com/LEGO-Technic-Furious-Nissan-Skyline/dp/B0DRW6C13X" 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:99.60%;"><img id="7MsCDSeP5iP47FD8GzfLTF" name="Technic 2 Fast 2 Furious Nissan Skyline GT-R (R34)" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7MsCDSeP5iP47FD8GzfLTF.jpg" mos="" align="middle" fullscreen="" width="1500" height="1494" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The second movie in the "Fast & Furious" saga may not have been the best (though certainly better than "Toyko Drift") but it did get us a look at the Skyline GT-R, one of the best cars from the whole series. And, this Lego set even lets you drift the car.<a class="view-deal button" href="https://www.amazon.com/LEGO-Technic-Furious-Nissan-Skyline/dp/B0DRW6C13X" target="_blank" rel="nofollow" data-dimension112="b18c2af2-9bea-48bc-b958-399d6e835c5d" data-action="Deal Block" data-label="The second movie in the "Fast &amp; Furious" saga may not have been the best (though certainly better than "Toyko Drift") but it did get us a look at the Skyline GT-R, one of the best cars from the whole series. And, this Lego set even lets you drift the car." data-dimension48="The second movie in the "Fast &amp; Furious" saga may not have been the best (though certainly better than "Toyko Drift") but it did get us a look at the Skyline GT-R, one of the best cars from the whole series. And, this Lego set even lets you drift the car." data-dimension25="$111">View Deal</a></p></div><div class="product"><a data-dimension112="1e961ccd-6d0c-4e47-8365-7b54c910b6d8" data-action="Deal Block" data-label="You built a time machine...out of Legos? This baby might not get up to 88 miles an hour, but lets you build three versions of the DeLorean — the original, the hover-conversion, and the 1955 model. And, it comes with Marty and Doc Brown minifigs." data-dimension48="You built a time machine...out of Legos? This baby might not get up to 88 miles an hour, but lets you build three versions of the DeLorean — the original, the hover-conversion, and the 1955 model. And, it comes with Marty and Doc Brown minifigs." data-dimension25="$159" href="https://www.amazon.com/LEGO-Future-Machine-Building-Detailed/dp/B09TBMHCXL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1487px;"><p class="vanilla-image-block" style="padding-top:100.87%;"><img id="aEkuFQGWbe8HJCp22Tew8D" name="Icons Back to the Future Time Machine" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aEkuFQGWbe8HJCp22Tew8D.jpg" mos="" align="middle" fullscreen="" width="1487" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>You built a time machine...out of Legos? This baby might not get up to 88 miles an hour, but lets you build three versions of the DeLorean — the original, the hover-conversion, and the 1955 model. And, it comes with Marty and Doc Brown minifigs.<a class="view-deal button" href="https://www.amazon.com/LEGO-Future-Machine-Building-Detailed/dp/B09TBMHCXL" target="_blank" rel="nofollow" data-dimension112="1e961ccd-6d0c-4e47-8365-7b54c910b6d8" data-action="Deal Block" data-label="You built a time machine...out of Legos? This baby might not get up to 88 miles an hour, but lets you build three versions of the DeLorean — the original, the hover-conversion, and the 1955 model. And, it comes with Marty and Doc Brown minifigs." data-dimension48="You built a time machine...out of Legos? This baby might not get up to 88 miles an hour, but lets you build three versions of the DeLorean — the original, the hover-conversion, and the 1955 model. And, it comes with Marty and Doc Brown minifigs." data-dimension25="$159">View Deal</a></p></div><div class="product"><a data-dimension112="94280c16-1d74-42af-bcc7-4d65bac04901" data-action="Deal Block" data-label="Autobots, roll out! Not only do you get to build an iconic 80s Transformer, but it actually transforms into the semi rig. This 15% off deal isn't huge, but it's better than nothing." data-dimension48="Autobots, roll out! Not only do you get to build an iconic 80s Transformer, but it actually transforms into the semi rig. This 15% off deal isn't huge, but it's better than nothing." data-dimension25="$152" href="https://www.amazon.com/LEGO-Optimus-Building-Collectible-Transformers/dp/B09XVH9ZWQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1488px;"><p class="vanilla-image-block" style="padding-top:100.81%;"><img id="hBj2aUE4DPFqkEWJAVrdpY" name="Icons Optimus Prime" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hBj2aUE4DPFqkEWJAVrdpY.jpg" mos="" align="middle" fullscreen="" width="1488" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Autobots, roll out! Not only do you get to build an iconic 80s Transformer, but it actually transforms into the semi rig. This 15% off deal isn't huge, but it's better than nothing.<a class="view-deal button" href="https://www.amazon.com/LEGO-Optimus-Building-Collectible-Transformers/dp/B09XVH9ZWQ" target="_blank" rel="nofollow" data-dimension112="94280c16-1d74-42af-bcc7-4d65bac04901" data-action="Deal Block" data-label="Autobots, roll out! Not only do you get to build an iconic 80s Transformer, but it actually transforms into the semi rig. This 15% off deal isn't huge, but it's better than nothing." data-dimension48="Autobots, roll out! Not only do you get to build an iconic 80s Transformer, but it actually transforms into the semi rig. This 15% off deal isn't huge, but it's better than nothing." data-dimension25="$152">View Deal</a></p></div><div class="product"><a data-dimension112="ec4496bd-3650-494b-ad14-5dcf2ce13bfc" data-action="Deal Block" data-label="This model will have you ready to go offroading on safari. It comes with all sorts of gear, like shovels and gas cans, and you can even build it with the steering wheel on the left or the right, which will make it appeal to both UK and US builders." data-dimension48="This model will have you ready to go offroading on safari. It comes with all sorts of gear, like shovels and gas cans, and you can even build it with the steering wheel on the left or the right, which will make it appeal to both UK and US builders." data-dimension25="$167" href="https://www.amazon.com/LEGO-Defender-Building-Immersive-Graduation/dp/B0BSR933M2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1495px;"><p class="vanilla-image-block" style="padding-top:100.33%;"><img id="xHDTgvyxtKJth8RokWVcDY" name="Icons Land Rover Classic Defender 90" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xHDTgvyxtKJth8RokWVcDY.jpg" mos="" align="middle" fullscreen="" width="1495" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This model will have you ready to go offroading on safari. It comes with all sorts of gear, like shovels and gas cans, and you can even build it with the steering wheel on the left or the right, which will make it appeal to both UK and US builders.<a class="view-deal button" href="https://www.amazon.com/LEGO-Defender-Building-Immersive-Graduation/dp/B0BSR933M2" target="_blank" rel="nofollow" data-dimension112="ec4496bd-3650-494b-ad14-5dcf2ce13bfc" data-action="Deal Block" data-label="This model will have you ready to go offroading on safari. It comes with all sorts of gear, like shovels and gas cans, and you can even build it with the steering wheel on the left or the right, which will make it appeal to both UK and US builders." data-dimension48="This model will have you ready to go offroading on safari. It comes with all sorts of gear, like shovels and gas cans, and you can even build it with the steering wheel on the left or the right, which will make it appeal to both UK and US builders." data-dimension25="$167">View Deal</a></p></div><h3 class="article-body__section" id="section-star-wars"><span>Star Wars </span></h3><div class="product"><a data-dimension112="9732d18b-5dbd-48ab-9ade-d681a9a239e0" data-action="Deal Block" data-label="It's a shame that the U-Wing didn't make its appearance until "Rogue One," but I'm glad I got to see more of it in "Andor." This set comes with minifigs of Cassian Andor,  Dedra Meero, an ISB Tactical Agent, and K-2SO" data-dimension48="It's a shame that the U-Wing didn't make its appearance until "Rogue One," but I'm glad I got to see more of it in "Andor." This set comes with minifigs of Cassian Andor,  Dedra Meero, an ISB Tactical Agent, and K-2SO" data-dimension25="$55" href="https://www.amazon.com/LEGO-Rebel-U-Wing-Starfighter-Building/dp/B0DJ19GL96" 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:99.93%;"><img id="9JkFiPHWN44w5ExLD3UCXW" name="Star Wars Rebel U-Wing" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9JkFiPHWN44w5ExLD3UCXW.jpg" mos="" align="middle" fullscreen="" width="1500" height="1499" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>It's a shame that the U-Wing didn't make its appearance until "Rogue One," but I'm glad I got to see more of it in "Andor." This set comes with minifigs of Cassian Andor,  Dedra Meero, an ISB Tactical Agent, and K-2SO<a class="view-deal button" href="https://www.amazon.com/LEGO-Rebel-U-Wing-Starfighter-Building/dp/B0DJ19GL96" target="_blank" rel="nofollow" data-dimension112="9732d18b-5dbd-48ab-9ade-d681a9a239e0" data-action="Deal Block" data-label="It's a shame that the U-Wing didn't make its appearance until "Rogue One," but I'm glad I got to see more of it in "Andor." This set comes with minifigs of Cassian Andor,  Dedra Meero, an ISB Tactical Agent, and K-2SO" data-dimension48="It's a shame that the U-Wing didn't make its appearance until "Rogue One," but I'm glad I got to see more of it in "Andor." This set comes with minifigs of Cassian Andor,  Dedra Meero, an ISB Tactical Agent, and K-2SO" data-dimension25="$55">View Deal</a></p></div><div class="product"><a data-dimension112="7117ea89-1d59-49fe-bbcb-5b57ad552d1f" data-action="Deal Block" data-label="If you have to flee the Empire with stolen Death Star plans, the Tantive IV might not be the best option, but it will get you as far as Tattooine. This small model doesn't have any minifigs, but does come with a nice display stand." data-dimension48="If you have to flee the Empire with stolen Death Star plans, the Tantive IV might not be the best option, but it will get you as far as Tattooine. This small model doesn't have any minifigs, but does come with a nice display stand." data-dimension25="$62" href="https://www.amazon.com/LEGO-Star-Wars-Anniversary-Collectible/dp/B0CGYH4VG8/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1486px;"><p class="vanilla-image-block" style="padding-top:100.94%;"><img id="cUztFMVSHjHKaspJmuVshn" name="Star Wars: A New Hope Tantive IV" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cUztFMVSHjHKaspJmuVshn.jpg" mos="" align="middle" fullscreen="" width="1486" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you have to flee the Empire with stolen Death Star plans, the Tantive IV might not be the best option, but it will get you as far as Tattooine. This small model doesn't have any minifigs, but does come with a nice display stand.<a class="view-deal button" href="https://www.amazon.com/LEGO-Star-Wars-Anniversary-Collectible/dp/B0CGYH4VG8/" target="_blank" rel="nofollow" data-dimension112="7117ea89-1d59-49fe-bbcb-5b57ad552d1f" data-action="Deal Block" data-label="If you have to flee the Empire with stolen Death Star plans, the Tantive IV might not be the best option, but it will get you as far as Tattooine. This small model doesn't have any minifigs, but does come with a nice display stand." data-dimension48="If you have to flee the Empire with stolen Death Star plans, the Tantive IV might not be the best option, but it will get you as far as Tattooine. This small model doesn't have any minifigs, but does come with a nice display stand." data-dimension25="$62">View Deal</a></p></div><div class="product"><a data-dimension112="559f11f8-05dc-4eec-9637-ae0b33268db6" data-action="Deal Block" data-label="As both a Star Wars nerd and Lego fan, owning a Millennium Falcon set always felt financially out of reach... until now. Discounted by a respectable 20%, the galaxy's arguably coolest ship can be yours for just $67, complete with a collectible display stand." data-dimension48="As both a Star Wars nerd and Lego fan, owning a Millennium Falcon set always felt financially out of reach... until now. Discounted by a respectable 20%, the galaxy's arguably coolest ship can be yours for just $67, complete with a collectible display stand." data-dimension25="$67" href="https://www.amazon.com/dp/B0CGY3ZB24" 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="airedale-paZVr6QDcXdZSNayz9epo9-9" name="Star Wars Millennium Falcon 25th Anniversary.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/TiqEWqmsWVDSpGynnhLCGE.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>As both a Star Wars nerd and Lego fan, owning a Millennium Falcon set always felt financially out of reach... until now. Discounted by a respectable 20%, the galaxy's arguably coolest ship can be yours for just $67, complete with a collectible display stand. <a class="view-deal button" href="https://www.amazon.com/dp/B0CGY3ZB24" target="_blank" rel="nofollow" data-dimension112="559f11f8-05dc-4eec-9637-ae0b33268db6" data-action="Deal Block" data-label="As both a Star Wars nerd and Lego fan, owning a Millennium Falcon set always felt financially out of reach... until now. Discounted by a respectable 20%, the galaxy's arguably coolest ship can be yours for just $67, complete with a collectible display stand." data-dimension48="As both a Star Wars nerd and Lego fan, owning a Millennium Falcon set always felt financially out of reach... until now. Discounted by a respectable 20%, the galaxy's arguably coolest ship can be yours for just $67, complete with a collectible display stand." data-dimension25="$67">View Deal</a></p></div><div class="product"><a data-dimension112="cc1d3a63-7ef4-4149-889b-93ad3aefbc2e" data-action="Deal Block" data-label="I realize this Star Wars Lego deal isn't exactly a barn burner, but that doesn't stop me from wanting to snag one for myself. Ultimately, Star Wars Legos don't often go on sale, especially cool Jedi starship sets like this. Either way, I'm hoping this one gets even cheaper as the Prime Day festivities roll on." data-dimension48="I realize this Star Wars Lego deal isn't exactly a barn burner, but that doesn't stop me from wanting to snag one for myself. Ultimately, Star Wars Legos don't often go on sale, especially cool Jedi starship sets like this. Either way, I'm hoping this one gets even cheaper as the Prime Day festivities roll on." data-dimension25="$27" href="https://www.amazon.com/LEGO-OBI-Wan-Kenobis-Starfighter-Building/dp/B09TC1BMBW/" 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="airedale-paZVr6QDcXdZSNayz9epo9-4" name="Star Wars OBI-Wan Kenobi's Jedi Starfighter.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PKpY6NsVDDhnfMVVQsF98Z.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I realize this Star Wars Lego deal isn't exactly a barn burner, but that doesn't stop me from wanting to snag one for myself. Ultimately, Star Wars Legos don't often go on sale, especially cool Jedi starship sets like this. Either way, I'm hoping this one gets even cheaper as the Prime Day festivities roll on.<a class="view-deal button" href="https://www.amazon.com/LEGO-OBI-Wan-Kenobis-Starfighter-Building/dp/B09TC1BMBW/" target="_blank" rel="nofollow" data-dimension112="cc1d3a63-7ef4-4149-889b-93ad3aefbc2e" data-action="Deal Block" data-label="I realize this Star Wars Lego deal isn't exactly a barn burner, but that doesn't stop me from wanting to snag one for myself. Ultimately, Star Wars Legos don't often go on sale, especially cool Jedi starship sets like this. Either way, I'm hoping this one gets even cheaper as the Prime Day festivities roll on." data-dimension48="I realize this Star Wars Lego deal isn't exactly a barn burner, but that doesn't stop me from wanting to snag one for myself. Ultimately, Star Wars Legos don't often go on sale, especially cool Jedi starship sets like this. Either way, I'm hoping this one gets even cheaper as the Prime Day festivities roll on." data-dimension25="$27">View Deal</a></p></div><div class="product"><a data-dimension112="0792a99c-d5a9-4adf-9cf2-a03983306dc5" data-action="Deal Block" data-label="This deal shaves $20 off our favorite droid from the entire Star Wars saga. While it doesn't roll, it has a 360-degree rotating head, detachable third leg, an attachable periscope and removable tools." data-dimension48="This deal shaves $20 off our favorite droid from the entire Star Wars saga. While it doesn't roll, it has a 360-degree rotating head, detachable third leg, an attachable periscope and removable tools." data-dimension25="$79" href="https://www.amazon.com/LEGO-Star-Wars-R2-D2-Building/dp/B0CGY22J6Y" 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.13%;"><img id="ZfPjzWof5X9emR4b2ggr9P" name="Star Wars R2-D2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZfPjzWof5X9emR4b2ggr9P.jpg" mos="" align="middle" fullscreen="" width="1500" height="1472" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This deal shaves $20 off our favorite droid from the entire Star Wars saga. While it doesn't roll, it has a 360-degree rotating head, detachable third leg, an attachable periscope and removable tools.<a class="view-deal button" href="https://www.amazon.com/LEGO-Star-Wars-R2-D2-Building/dp/B0CGY22J6Y" target="_blank" rel="nofollow" data-dimension112="0792a99c-d5a9-4adf-9cf2-a03983306dc5" data-action="Deal Block" data-label="This deal shaves $20 off our favorite droid from the entire Star Wars saga. While it doesn't roll, it has a 360-degree rotating head, detachable third leg, an attachable periscope and removable tools." data-dimension48="This deal shaves $20 off our favorite droid from the entire Star Wars saga. While it doesn't roll, it has a 360-degree rotating head, detachable third leg, an attachable periscope and removable tools." data-dimension25="$79">View Deal</a></p></div><h3 class="article-body__section" id="section-technics"><span>Technics</span></h3><div class="product"><a data-dimension112="d44a6c19-3b04-4682-b66d-9210998fff8a" data-action="Deal Block" data-label="Most of Lego's most expensive sets aren't yet on sale, but this massive crane is one exception. It's not cheap, but this Prime Day deal takes it down by 25%" data-dimension48="Most of Lego's most expensive sets aren't yet on sale, but this massive crane is one exception. It's not cheap, but this Prime Day deal takes it down by 25%" data-dimension25="$489" href="https://www.amazon.com/LEGO-Liebherr-Rewarding-Incredible-Including/dp/B0BSRFQLD6" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1496px;"><p class="vanilla-image-block" style="padding-top:100.27%;"><img id="FwdxnhcvMXQCo5WmWMucCH" name="Technic Liebherr Crawler Crane" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FwdxnhcvMXQCo5WmWMucCH.jpg" mos="" align="middle" fullscreen="" width="1496" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Most of Lego's most expensive sets aren't yet on sale, but this massive crane is one exception. It's not cheap, but this Prime Day deal takes it down by 25%<a class="view-deal button" href="https://www.amazon.com/LEGO-Liebherr-Rewarding-Incredible-Including/dp/B0BSRFQLD6" target="_blank" rel="nofollow" data-dimension112="d44a6c19-3b04-4682-b66d-9210998fff8a" data-action="Deal Block" data-label="Most of Lego's most expensive sets aren't yet on sale, but this massive crane is one exception. It's not cheap, but this Prime Day deal takes it down by 25%" data-dimension48="Most of Lego's most expensive sets aren't yet on sale, but this massive crane is one exception. It's not cheap, but this Prime Day deal takes it down by 25%" data-dimension25="$489">View Deal</a></p></div><div class="product"><a data-dimension112="e51608a5-6716-447c-b785-85a2900049e5" data-action="Deal Block" data-label="Looking for a challenge? Take the Lego Vincent Van Gogh three-dimensional Starry Night recreation for a spin. Currently on sale for 20% off, this kit includes a massive amount of bricks; more than 2,300!" data-dimension48="Looking for a challenge? Take the Lego Vincent Van Gogh three-dimensional Starry Night recreation for a spin. Currently on sale for 20% off, this kit includes a massive amount of bricks; more than 2,300!" data-dimension25="$136" href="https://www.amazon.com/dp/B09SM828FD?th=1" 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="airedale-paZVr6QDcXdZSNayz9epo9-10" name="Vincent Van Gogh The Starry Night.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2jUck8z2UJDh3DqoNZCxH8.jpg" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Looking for a challenge? Take the Lego Vincent Van Gogh three-dimensional Starry Night recreation for a spin. Currently on sale for 20% off, this kit includes a massive amount of bricks; more than 2,300! <a class="view-deal button" href="https://www.amazon.com/dp/B09SM828FD?th=1" target="_blank" rel="nofollow" data-dimension112="e51608a5-6716-447c-b785-85a2900049e5" data-action="Deal Block" data-label="Looking for a challenge? Take the Lego Vincent Van Gogh three-dimensional Starry Night recreation for a spin. Currently on sale for 20% off, this kit includes a massive amount of bricks; more than 2,300!" data-dimension48="Looking for a challenge? Take the Lego Vincent Van Gogh three-dimensional Starry Night recreation for a spin. Currently on sale for 20% off, this kit includes a massive amount of bricks; more than 2,300!" data-dimension25="$136">View Deal</a></p></div><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Construction+Toys&min_discount_ratio=0.95&offer_type=all&view_mode=carousel&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=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 { background-color: #5DAF08 !important; }              .tg-df-container .hawk-affiliate-link-deal-button: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';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                 if(!r) return;                                  if (typeof trackHawkEvent !== 'undefined') {                     trackHawkEvent({                         clickType: "CC",                         widgetId: this.widgetId,                         productCategoryName: "deals",                         zeroBasedProductIndexOrNull: null,                         totalDealsOrProducts: null,                         areaClicked: "Category Roundel",                         revenueId: this.revenueId,                         isoCurrencyCode: typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD',                         queryName: r.label,                         widgetTypeName: this.widgetTypeName                     });                 }                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const 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');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map((v, 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.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            if (!this.processArticleFired) {                  this.processArticleFired = true;                  document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));               }            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Who needs A/C anyway? 7 heatwave essentials I'm relying on right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/who-needs-a-c-anyway-heatwave-essentials-im-relying-on-right-now</link>
                                                                            <description>
                            <![CDATA[ How a tech tester stays cool in 39C. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">rF8GEgEuWMPwJPCYMCbM3T</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/8yUAsJSJPjW4wRxAxWyv5X-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 22 Jun 2026 11:02:15 +0000</pubDate>                                                                                                                                <updated>Mon, 22 Jun 2026 11:27:45 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ peter.wolinski@futurenet.com (Peter Wolinski) ]]></author>                    <dc:creator><![CDATA[ Peter Wolinski ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/stgPfXWY7ukw8J8rfC7vjg.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Peter is a Senior Editor at Tom&#039;s Guide, heading up the site&#039;s Reviews team and Cameras section. Having built gaming PCs since he was 10 (that&#039;s a while ago now) he&#039;s a bit of a nerd about components and hardware. He&#039;s also been an iPhone user since the classic iPhone 4, and a Mac user for well over a decade. Experienced in using and testing all kinds of technology — from phones through to tablets, computers, games consoles, cameras and smart home tech — helping people find the best tech for them (at the best prices) is what Peter does best. A photographer since he bought his first camera (a Fujifilm) in 2015, Peter was previously an Editor for Canon-Europe.com. He then edited the Cameras and How To sections of Tom&#039;s Guide. When he&#039;s not crafting helpful, in-depth reviews, Peter can usually be found out and about honing his architectural photography skills, riding his motorcycle around Welsh mountain roads, telling everyone about his two greyhounds, squeezing a few extra FPS out of PC games or perfecting his espresso shots.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/8yUAsJSJPjW4wRxAxWyv5X-1280-80.jpg">
                                                            <media:credit><![CDATA[Peter Wolinski / Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A Warmco portable handheld fan in hand with green foliage in the background]]></media:description>                                                            <media:text><![CDATA[A Warmco portable handheld fan in hand with green foliage in the background]]></media:text>
                                <media:title type="plain"><![CDATA[A Warmco portable handheld fan in hand with green foliage in the background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/8yUAsJSJPjW4wRxAxWyv5X-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's 10:30 on Monday as I write this, and it's already a crazy week, isn't it? The PM is headed off (again), and the Met Office app is already telling me we're in the late 20s celsius. </p><p>And it's only going to get worse. Where I am, near Bath Spa, it's forecast to hit 39C on Wednesday, with much of England's south in the same position.</p><p>Thankfully, I've got a few tricks up my sleeve. I'm the Senior Reviews Editor here at Tom's Guide, which means I get access to my fair share of tech. Ever since May, I've been calling in and testing products ready for the summer heat.</p><p>I'm not going to say I'm as cool as I'd like to be, but I'm certainly a lot more comfortable with this gear than without. And as a bonus, some of it is on sale for the <a href="https://www.tomsguide.com/uk/news/best-prime-day-deals-and-sales">Prime Day deals</a>. Here's my essential heatwave tech. </p><h2 id="beat-the-heat-my-essential-heatwave-gear">Beat the heat: My essential heatwave gear</h2><div class="product"><a data-dimension112="50d1b703-20ce-4241-adf2-1bc5e86d2497" data-action="Deal Block" data-label="Let's start with the obvious: a fan! I bought this handheld Warmco fan a few weeks back to keep me cool during a humid press trip to Vienna. And it hasn't left my bag since. It's powerful, and on the lower settings (which still give plenty of cooling), it lasts for hours. It's now seeing me through a second heatwave, in addition to the Austria trip and a late May camping trip in mid-20s heat. It's a cheap alternative to the Shark ChillPill 3-in-1, although lacks the Shark's misting function." data-dimension48="Let's start with the obvious: a fan! I bought this handheld Warmco fan a few weeks back to keep me cool during a humid press trip to Vienna. And it hasn't left my bag since. It's powerful, and on the lower settings (which still give plenty of cooling), it lasts for hours. It's now seeing me through a second heatwave, in addition to the Austria trip and a late May camping trip in mid-20s heat. It's a cheap alternative to the Shark ChillPill 3-in-1, although lacks the Shark's misting function." data-dimension25="£29.98" href="https://www.amazon.co.uk/Warmco-Portable-Handheld-Adjustable-Rechargeable/dp/B0F7KB3795" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1004px;"><p class="vanilla-image-block" style="padding-top:121.31%;"><img id="4hL6SWWidtvtFAt3VPWhDf" name="Warmco Mini Turbo Handheld fan" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4hL6SWWidtvtFAt3VPWhDf.jpg" mos="" align="middle" fullscreen="" width="1004" height="1218" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Let's start with the obvious: a fan! I bought this handheld Warmco fan a few weeks back to keep me cool during a humid press trip to Vienna. And it hasn't left my bag since. It's powerful, and on the lower settings (which still give plenty of cooling), it lasts for hours. It's now seeing me through a second heatwave, in addition to the Austria trip and a late May camping trip in mid-20s heat. It's a cheap alternative to the Shark ChillPill 3-in-1, although lacks the Shark's misting function. <a class="view-deal button" href="https://www.amazon.co.uk/Warmco-Portable-Handheld-Adjustable-Rechargeable/dp/B0F7KB3795" target="_blank" rel="nofollow" data-dimension112="50d1b703-20ce-4241-adf2-1bc5e86d2497" data-action="Deal Block" data-label="Let's start with the obvious: a fan! I bought this handheld Warmco fan a few weeks back to keep me cool during a humid press trip to Vienna. And it hasn't left my bag since. It's powerful, and on the lower settings (which still give plenty of cooling), it lasts for hours. It's now seeing me through a second heatwave, in addition to the Austria trip and a late May camping trip in mid-20s heat. It's a cheap alternative to the Shark ChillPill 3-in-1, although lacks the Shark's misting function." data-dimension48="Let's start with the obvious: a fan! I bought this handheld Warmco fan a few weeks back to keep me cool during a humid press trip to Vienna. And it hasn't left my bag since. It's powerful, and on the lower settings (which still give plenty of cooling), it lasts for hours. It's now seeing me through a second heatwave, in addition to the Austria trip and a late May camping trip in mid-20s heat. It's a cheap alternative to the Shark ChillPill 3-in-1, although lacks the Shark's misting function." data-dimension25="£29.98">View Deal</a></p></div><div class="product"><a data-dimension112="427d475a-663a-4f23-9c2c-3a6cd199c97b" data-action="Deal Block" data-label="Dyson Purifier Cool PC3" data-dimension48="Dyson Purifier Cool PC3" data-dimension25="£449" href="https://www.dyson.co.uk/air-treatment/purifiers/purifier-cool-pc2/de-nox-white-gold" 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="SKyi23fBfcUUzUYamXptpm" name="Dyson PC2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/SKyi23fBfcUUzUYamXptpm.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Yep... another fan. But a much bigger one this time. I've been testing two <a href="https://www.tomsguide.com/home/home-appliances/dyson-find-follow-purifier-cool-pc3-review" data-dimension112="427d475a-663a-4f23-9c2c-3a6cd199c97b" data-action="Deal Block" data-label="Dyson Purifier Cool PC3" data-dimension48="Dyson Purifier Cool PC3" data-dimension25="£449">Dyson Purifier Cool PC3</a> fans since our last heatwave a few weeks back, and these things are life-savers. The PC2 is essentially the same as the newer PC3, but cheaper, as it lacks the PC3's automatic human detection / tracking mode (which isn't that good anyway). What I love about the Dyson PC range is that they're fans and purifiers. That means if you have your windows open to let a breeze in, it'll also clean the air of pollen, dust and nasty road emissions.<a class="view-deal button" href="https://www.dyson.co.uk/air-treatment/purifiers/purifier-cool-pc2/de-nox-white-gold" target="_blank" rel="nofollow" data-dimension112="427d475a-663a-4f23-9c2c-3a6cd199c97b" data-action="Deal Block" data-label="Dyson Purifier Cool PC3" data-dimension48="Dyson Purifier Cool PC3" data-dimension25="£449">View Deal</a></p></div><div class="product"><a data-dimension112="b439de8e-8d6c-4839-baed-1581c228c656" data-action="Deal Block" data-label="Sony REON Pocket Pro Plus" data-dimension48="Sony REON Pocket Pro Plus" data-dimension25="£139" href="https://www.amazon.co.uk/REON-POCKET-Sensing-Wearable-Cooler/dp/B0CXCDZ1FW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:300px;"><p class="vanilla-image-block" style="padding-top:88.00%;"><img id="FfS3JcFkD46HQTwH6krz3B" name="Sony REON Pocket 5" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FfS3JcFkD46HQTwH6krz3B.jpg" mos="" align="middle" fullscreen="" width="300" height="264" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Another personal cooling device, the Sony REON goes about things a little differently. Instead of blowing air at you, it sits on the back of your neck (or wherever you want to place it) and cools down your whole body. We recently tested the <a href="https://www.tomsguide.com/home/reon-pocket-pro-plus-review" data-dimension112="b439de8e-8d6c-4839-baed-1581c228c656" data-action="Deal Block" data-label="Sony REON Pocket Pro Plus" data-dimension48="Sony REON Pocket Pro Plus" data-dimension25="£139">Sony REON Pocket Pro Plus</a> and awarded our Editor's Choice badge — these things are seriously good.<a class="view-deal button" href="https://www.amazon.co.uk/REON-POCKET-Sensing-Wearable-Cooler/dp/B0CXCDZ1FW" target="_blank" rel="nofollow" data-dimension112="b439de8e-8d6c-4839-baed-1581c228c656" data-action="Deal Block" data-label="Sony REON Pocket Pro Plus" data-dimension48="Sony REON Pocket Pro Plus" data-dimension25="£139">View Deal</a></p></div><div class="product"><a data-dimension112="64ceaca6-4ea6-4af9-97d9-14b72b003625" data-action="Deal Block" data-label="If you aren't doing this hack already, you need to be. I may have access to loads of high-end gadgets, but sometimes the low-tech solutions are the best. Putting ice in front of a fan cools down the air it pushes through, creating a jerry-rigged AC system. It doesn't have to be complicated: you can simply use a bowl of ice if you like, but I prefer to use large, re-freezable ice packs like these. For under £6, this is a cheap, simple and reusable way to increase your fan's performance." data-dimension48="If you aren't doing this hack already, you need to be. I may have access to loads of high-end gadgets, but sometimes the low-tech solutions are the best. Putting ice in front of a fan cools down the air it pushes through, creating a jerry-rigged AC system. It doesn't have to be complicated: you can simply use a bowl of ice if you like, but I prefer to use large, re-freezable ice packs like these. For under £6, this is a cheap, simple and reusable way to increase your fan's performance." data-dimension25="£5.99" href="https://www.amazon.co.uk/KEPLIN-Freezer-Family-Blocks-17x10x2cm/dp/B07CHWHPR4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:256px;"><p class="vanilla-image-block" style="padding-top:117.19%;"><img id="hNhSXxZHgCJEWTJSBMVEZZ" name="Kelpin Freezer Blocks" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hNhSXxZHgCJEWTJSBMVEZZ.jpg" mos="" align="middle" fullscreen="" width="256" height="300" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you aren't doing this hack already, you need to be. I may have access to loads of high-end gadgets, but sometimes the low-tech solutions are the best. Putting ice in front of a fan cools down the air it pushes through, creating a jerry-rigged AC system. It doesn't have to be complicated: you can simply use a bowl of ice if you like, but I prefer to use large, re-freezable ice packs like these. For under £6, this is a cheap, simple and reusable way to increase your fan's performance.<a class="view-deal button" href="https://www.amazon.co.uk/KEPLIN-Freezer-Family-Blocks-17x10x2cm/dp/B07CHWHPR4" target="_blank" rel="nofollow" data-dimension112="64ceaca6-4ea6-4af9-97d9-14b72b003625" data-action="Deal Block" data-label="If you aren't doing this hack already, you need to be. I may have access to loads of high-end gadgets, but sometimes the low-tech solutions are the best. Putting ice in front of a fan cools down the air it pushes through, creating a jerry-rigged AC system. It doesn't have to be complicated: you can simply use a bowl of ice if you like, but I prefer to use large, re-freezable ice packs like these. For under £6, this is a cheap, simple and reusable way to increase your fan's performance." data-dimension48="If you aren't doing this hack already, you need to be. I may have access to loads of high-end gadgets, but sometimes the low-tech solutions are the best. Putting ice in front of a fan cools down the air it pushes through, creating a jerry-rigged AC system. It doesn't have to be complicated: you can simply use a bowl of ice if you like, but I prefer to use large, re-freezable ice packs like these. For under £6, this is a cheap, simple and reusable way to increase your fan's performance." data-dimension25="£5.99">View Deal</a></p></div><div class="product"><a data-dimension112="bca5131b-6f87-471b-9561-62f73ca13946" data-action="Deal Block" data-label=""How is a pizza oven going to help me beat the heat?" Just... hear me out. I've been rinsing the pizzas for the last few weeks, in large part because cooking in my kitchen is absolutely dire in this heat. The Ooni needs to be run outside, and cooking outside stops your kitchen and house being heated up by the oven, hob or air fryer. Oh, and the Karu 2 is an awesome, affordable little oven which heats up quickly, can use various fuels, and cooks pro-quality pizzas in as little as 90 seconds. Dine al fresco." data-dimension48=""How is a pizza oven going to help me beat the heat?" Just... hear me out. I've been rinsing the pizzas for the last few weeks, in large part because cooking in my kitchen is absolutely dire in this heat. The Ooni needs to be run outside, and cooking outside stops your kitchen and house being heated up by the oven, hob or air fryer. Oh, and the Karu 2 is an awesome, affordable little oven which heats up quickly, can use various fuels, and cooks pro-quality pizzas in as little as 90 seconds. Dine al fresco." data-dimension25="£383.2" href="https://www.amazon.co.uk/Ooni-Karu-Pizza-Essentials-Bundle/dp/B0H4RPXNWC/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1400px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="ZWXfKDKexA6grx2C7HXLoN" name="Ooni Karu 2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZWXfKDKexA6grx2C7HXLoN.jpg" mos="" align="middle" fullscreen="" width="1400" height="1400" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>"How is a pizza oven going to help me beat the heat?" Just... hear me out. I've been rinsing the pizzas for the last few weeks, in large part because cooking in my kitchen is absolutely dire in this heat. The Ooni needs to be run outside, and cooking outside stops your kitchen and house being heated up by the oven, hob or air fryer. Oh, and the Karu 2 is an awesome, affordable little oven which heats up quickly, can use various fuels, and cooks pro-quality pizzas in as little as 90 seconds. Dine al fresco.<a class="view-deal button" href="https://www.amazon.co.uk/Ooni-Karu-Pizza-Essentials-Bundle/dp/B0H4RPXNWC/" target="_blank" rel="nofollow" data-dimension112="bca5131b-6f87-471b-9561-62f73ca13946" data-action="Deal Block" data-label=""How is a pizza oven going to help me beat the heat?" Just... hear me out. I've been rinsing the pizzas for the last few weeks, in large part because cooking in my kitchen is absolutely dire in this heat. The Ooni needs to be run outside, and cooking outside stops your kitchen and house being heated up by the oven, hob or air fryer. Oh, and the Karu 2 is an awesome, affordable little oven which heats up quickly, can use various fuels, and cooks pro-quality pizzas in as little as 90 seconds. Dine al fresco." data-dimension48=""How is a pizza oven going to help me beat the heat?" Just... hear me out. I've been rinsing the pizzas for the last few weeks, in large part because cooking in my kitchen is absolutely dire in this heat. The Ooni needs to be run outside, and cooking outside stops your kitchen and house being heated up by the oven, hob or air fryer. Oh, and the Karu 2 is an awesome, affordable little oven which heats up quickly, can use various fuels, and cooks pro-quality pizzas in as little as 90 seconds. Dine al fresco." data-dimension25="£383.2">View Deal</a></p></div><div class="product"><a data-dimension112="90ef7b34-8055-4d69-a911-ce28ea2f41de" data-action="Deal Block" data-label="No parasol? No problem. A camping tarp is a great budget alternative. I bought one like this Wadeo heavy duty tarpaulin, initially for camping, but I've put it up in my garden for the coming week to provide some more shade for my family and dogs." data-dimension48="No parasol? No problem. A camping tarp is a great budget alternative. I bought one like this Wadeo heavy duty tarpaulin, initially for camping, but I've put it up in my garden for the coming week to provide some more shade for my family and dogs." data-dimension25="£46.99" href="https://www.amazon.co.uk/WADEO-Camping-Waterproof-Heavy-Duty-Hammock/dp/B0BLMJLMPR" 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:92.20%;"><img id="F9Xb5pu5sbgPvNVubsDvdi" name="WADEO Camping Tarp Shelter" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/F9Xb5pu5sbgPvNVubsDvdi.jpg" mos="" align="middle" fullscreen="" width="1500" height="1383" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>No parasol? No problem. A camping tarp is a great budget alternative. I bought one like this Wadeo heavy duty tarpaulin, initially for camping, but I've put it up in my garden for the coming week to provide some more shade for my family and dogs. <a class="view-deal button" href="https://www.amazon.co.uk/WADEO-Camping-Waterproof-Heavy-Duty-Hammock/dp/B0BLMJLMPR" target="_blank" rel="nofollow" data-dimension112="90ef7b34-8055-4d69-a911-ce28ea2f41de" data-action="Deal Block" data-label="No parasol? No problem. A camping tarp is a great budget alternative. I bought one like this Wadeo heavy duty tarpaulin, initially for camping, but I've put it up in my garden for the coming week to provide some more shade for my family and dogs." data-dimension48="No parasol? No problem. A camping tarp is a great budget alternative. I bought one like this Wadeo heavy duty tarpaulin, initially for camping, but I've put it up in my garden for the coming week to provide some more shade for my family and dogs." data-dimension25="£46.99">View Deal</a></p></div><div class="product"><a data-dimension112="78ae8918-6a93-4837-bc3c-078016ef9fd4" data-action="Deal Block" data-label="If, like me, you've got pets, you'll know that the severe heat brings an extra stressor: keeping your animals comfortable and safe from the heat. I have two large ex-racing greyhounds, who really struggle in the heat (especially at night). We use two large cooling pads, which are very effective. You can put them underneath a thin blanket if your pet isn't liking the look of the mat, and they'll still benefit from the cooling effect. Our dogs actually get a little chilly on these during the night, and go back to their fluffy warm beds in the early hours!" data-dimension48="If, like me, you've got pets, you'll know that the severe heat brings an extra stressor: keeping your animals comfortable and safe from the heat. I have two large ex-racing greyhounds, who really struggle in the heat (especially at night). We use two large cooling pads, which are very effective. You can put them underneath a thin blanket if your pet isn't liking the look of the mat, and they'll still benefit from the cooling effect. Our dogs actually get a little chilly on these during the night, and go back to their fluffy warm beds in the early hours!" data-dimension25="£39.09" href="https://www.amazon.co.uk/Pecute-Cooling-Summer-Durable-Non-Toxic/dp/B08M478X8C" 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:49.40%;"><img id="Y3J4y2vtb5QJU3vSGwpr3J" name="Pecute pet cooling mat" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Y3J4y2vtb5QJU3vSGwpr3J.jpg" mos="" align="middle" fullscreen="" width="1500" height="741" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If, like me, you've got pets, you'll know that the severe heat brings an extra stressor: keeping your animals comfortable and safe from the heat. I have two large ex-racing greyhounds, who really struggle in the heat (especially at night). We use two large cooling pads, which are very effective. You can put them underneath a thin blanket if your pet isn't liking the look of the mat, and they'll still benefit from the cooling effect. Our dogs actually get a little chilly on these during the night, and go back to their fluffy warm beds in the early hours!<a class="view-deal button" href="https://www.amazon.co.uk/Pecute-Cooling-Summer-Durable-Non-Toxic/dp/B08M478X8C" target="_blank" rel="nofollow" data-dimension112="78ae8918-6a93-4837-bc3c-078016ef9fd4" data-action="Deal Block" data-label="If, like me, you've got pets, you'll know that the severe heat brings an extra stressor: keeping your animals comfortable and safe from the heat. I have two large ex-racing greyhounds, who really struggle in the heat (especially at night). We use two large cooling pads, which are very effective. You can put them underneath a thin blanket if your pet isn't liking the look of the mat, and they'll still benefit from the cooling effect. Our dogs actually get a little chilly on these during the night, and go back to their fluffy warm beds in the early hours!" data-dimension48="If, like me, you've got pets, you'll know that the severe heat brings an extra stressor: keeping your animals comfortable and safe from the heat. I have two large ex-racing greyhounds, who really struggle in the heat (especially at night). We use two large cooling pads, which are very effective. You can put them underneath a thin blanket if your pet isn't liking the look of the mat, and they'll still benefit from the cooling effect. Our dogs actually get a little chilly on these during the night, and go back to their fluffy warm beds in the early hours!" data-dimension25="£39.09">View Deal</a></p></div><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-deals"><span>We're tracking all the best Prime Day deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=Everything&min_discount_ratio=0.95&offer_type=all&view_mode=carousel&widget_title=Top+Deals+Handpicked+by+Our+Editors&widget_subtitle=Discover+the+best+discounts+currently+available%2C+curated+daily+by+the+Tom%27s+Guide+Savings+Squad.&bg_color=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-right {      position: absolute;      right: 8px;      top: 50%;      transform: translateY(-50%);      height: 36px;      width: 36px;      display: flex;      align-items: center;      justify-content: center;      border-radius: 50%;      background-color: #ffffff;      border: 1px solid #e2e8f0;      box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);      color: #1F69FF;      cursor: pointer;      transition: all 0.2s;      margin-top: -4px;      z-index: 20;    }    .tg-df-container .tg-df-carousel-scroll-right:hover {      background-color: #f8fafc;      border-color: #cbd5e1;    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right {      right: 0;      background-color: rgba(255, 255, 255, 0.4);      border: none;      box-shadow: none;      backdrop-filter: blur(4px);      -webkit-backdrop-filter: blur(4px);    }    .tg-df-carousel-roundels-wrapper .tg-df-carousel-scroll-right:hover {      background-color: rgba(255, 255, 255, 0.6);      border: none;    }    .tg-df-container .tg-df-carousel-roundels::-webkit-scrollbar {      display: none;    }    .tg-df-container .tg-df-carousel-roundels::after {      content: "";      flex: 0 0 32px;    }    .tg-df-container .tg-df-roundel {      display: flex;      flex-direction: column;      align-items: center;      gap: 8px;      cursor: pointer;      min-width: 120px;      flex-shrink: 0;    }    .tg-df-container .tg-df-roundel-img-box {      width: 120px;      height: 120px;      border-radius: 50%;      background: white;      display: flex;      align-items: center;      justify-content: center;      overflow: hidden;      box-shadow: 0px 3px 14px 0px rgba(30, 41, 59, 0.08);      transition: box-shadow 0.2s;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-img-box {      box-shadow: 0 0 0 2px #E7F0FF, 0 0 0 4px #1F69FF;    }    .tg-df-container .tg-df-roundel:hover .tg-df-roundel-img-box img {      transform: scale(1.08);    }    .tg-df-container .tg-df-roundel-img-box img {      width: 100%;      height: 100%;      object-fit: contain;      padding: 10px;      box-sizing: border-box;      transition: transform 0.3s ease;    }    .tg-df-container .tg-df-roundel-label {      font-size: 13px;      font-weight: 400;      color: #1e293b;      text-align: center;      transition: font-weight 0.2s;    }    .tg-df-container .tg-df-roundel.active .tg-df-roundel-label {      font-weight: 700;    }    .tg-df-container .tg-df-carousel-filters-label {      font-size: 16px;      font-weight: 400;      color: #1e293b;      white-space: nowrap;      margin-right: 4px;    }    .tg-df-container .tg-df-carousel-filters-wrap {      display: flex;      align-items: center;      flex-wrap: nowrap;      gap: 8px;      margin-top: 8px;      overflow-x: auto;      scrollbar-width: none;      -webkit-overflow-scrolling: touch;      padding-bottom: 8px;      margin-left: -24px;      margin-right: -24px;      padding-left: 24px;      padding-right: 24px;    }    .tg-df-container .tg-df-carousel-filters-wrap::-webkit-scrollbar {      display: none;    }        .tg-df-container .tg-df-carousel-filter-btn img,    .tg-df-container .tg-df-carousel-filter-btn picture {      height: 20px;      width: 20px;      object-fit: contain;      object-position: center;      display: inline-flex;      align-items: center;      justify-content: center;      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn picture img {      margin-right: 0;      height: 100%;      width: 100%;    }    .tg-df-container .tg-df-carousel-filter-btn img.active-img,    .tg-df-container .tg-df-carousel-filter-btn picture:has(.active-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.inactive-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.inactive-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.inactive-img) {      display: none;    }    .tg-df-container .tg-df-carousel-filter-btn:hover img.active-img,    .tg-df-container .tg-df-carousel-filter-btn.active img.active-img,    .tg-df-container .tg-df-carousel-filter-btn:hover picture:has(.active-img),    .tg-df-container .tg-df-carousel-filter-btn.active picture:has(.active-img) {      display: inline-flex;    }    .tg-df-container .tg-df-carousel-filter-btn {      background: #ffffff;      border: 2px solid #1e293b;      color: #1e293b;      border-radius: 24px;      padding: 6px 16px;      font-size: 14px;      font-weight: 600;      cursor: pointer;      transition: all 0.2s;      flex-shrink: 0;      white-space: nowrap;      display: inline-flex;      align-items: center;      justify-content: center;      min-height: 36px;      box-sizing: border-box;    }    .tg-df-container .tg-df-carousel-filter-btn svg {      margin-right: 6px;    }    .tg-df-container .tg-df-carousel-filter-btn:hover {      background: #1e293b;      color: white;      border-color: #1e293b;    }    .tg-df-container .tg-df-carousel-filter-btn.active {      background: #1e293b;      color: white;      border-color: #1e293b;    }        .tg-df-grid.carousel-compact {      display: flex;      flex-wrap: nowrap;      overflow-x: auto;      gap: 16px;      padding: 16px 24px;      align-items: stretch;      scrollbar-width: none;    }    .tg-df-grid.carousel-compact::after {      content: "";      flex: 0 0 32px;    }    .tg-df-grid-wrapper {      position: relative;    }    .tg-df-grid.carousel-compact::-webkit-scrollbar {      display: none;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card {      flex: 0 0 auto;      width: 100px;      border-radius: 15px;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      border: 2px solid #1e293b;      background: white;      color: #1e293b;      display: flex;      flex-direction: column;      justify-content: center;      align-items: center;      font-weight: 600;      font-size: 14px;      cursor: pointer;      padding: 16px;      text-align: center;      transition: all 0.2s;    }    .tg-df-grid.carousel-compact .tg-df-load-more-card:hover {      background: #1e293b;      color: white;    }    .tg-df-grid.carousel-compact .tg-df-card {      flex: 0 0 auto;      width: 200px;      min-height: auto;      height: auto;      display: flex;      flex-direction: column;      border-radius: 15px;      border: none;      box-shadow: 0 0 16px rgba(0,0,0,0.08);      overflow: visible;    }    .tg-df-grid.carousel-compact .tg-df-card-image-box {      padding: 12px;      background-color: transparent;      border-radius: 15px 15px 0 0;      height: 130px;    }    .tg-df-grid.carousel-compact .tg-df-card-image {      mix-blend-mode: normal;    }    .tg-df-grid.carousel-compact .tg-df-card-discount-badge {      border-radius: 0;      top: 0px;      left: 0px;      padding: 4px 8px;      font-size: 11px;    }    .tg-df-grid.carousel-compact .tg-df-card-body {      padding: 8px 12px 12px 12px;    }    .tg-df-grid.carousel-compact .tg-df-card-title {      font-size: 14px;      font-weight: 400;      -webkit-line-clamp: 2;      margin-bottom: 8px;      color: #011535;    }    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):not(:has(.tg-df-tag-prime)):not(:has(.tg-df-coupon-wrapper:not([style*="none"]))) > .tg-df-card-title,    .tg-df-grid.carousel-compact .tg-df-card-body:not(:has(.tg-df-card-stars)):has(> .tg-df-card-title:first-child) > .tg-df-card-title {      -webkit-line-clamp: 3;    }    .tg-df-grid.carousel-compact .tg-df-card-cta {      border-radius: 5px;      padding: 8px 10px;      margin-top: 4px;      background-color: #1F69FF;    }    .tg-df-grid.carousel-compact .tg-df-card-price-group {      margin-bottom: 2px;    }    .tg-df-grid.carousel-compact .tg-df-card-merchant-pill {      margin-bottom: 2px;    }    @container tg-df (max-width: 599px) {      .tg-df-container .tg-df-carousel-blue-box-title {        font-size: 24px;      }      .tg-df-container .tg-df-countdown-title {        display: none;      }      .tg-df-container .tg-df-countdown-wrapper {        position: absolute;        top: 0;        right: 0;        align-items: flex-end;        transform: scale(0.45);        transform-origin: top right;      }      .tg-df-container .tg-df-roundel {        min-width: 88px;      }      .tg-df-container .tg-df-roundel-img-box {        width: 88px;        height: 88px;      }    }    /* REPLICA BLOCK STYLES */    .tg-df-grid.layout-replica-2 { grid-template-columns: repeat(2, 1fr) !important; gap: 20px; }    .tg-df-grid.layout-replica-1 { grid-template-columns: 1fr !important; gap: 20px; }        .tg-df-container .hawk-deal-widget-container { border-bottom: 1px solid #e5e7eb; display: flex; flex-direction: column; margin: 0; padding: 20px 0; box-sizing: border-box; font-family: inherit; }    .tg-df-container .hawk-deal-widget-wrap { display: flex; flex-direction: row; align-items: flex-start; width: 100%; gap: 24px; }    .tg-df-container .hawk-deal-widget-image-container { display: flex; flex-shrink: 0; justify-content: center; width: 160px; height: 160px; align-items: center; background: white; margin-bottom: 0px; }    .tg-df-container .hawk-deal-widget-title-product-title { color: #111827; font-size: 18px; font-weight: 700; line-height: 1.4; display: inline; }    .tg-df-container .hawk-deal-widget-title-price { font-size: 18px; font-weight: 700; line-height: 1.4; white-space: nowrap; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-price-now { font-weight: 700; }    .tg-df-container .hawk-deal-widget-title-retailer-price:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-title-retailer { font-size: 18px; font-weight: 700; line-height: 1.4; color: #2563eb; }    .tg-df-container .hawk-deal-widget-title-was-price { color: #dc2626; font-size: 16px; font-weight: 500; line-height: 1.4; text-decoration: line-through; white-space: nowrap; margin-left: 8px; margin-right: 8px; }    .tg-df-container .hawk-deal-widget-text-body-container { position: relative; width: 100%; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-text-body-main { font-size: 16px; width: 100%; margin-bottom: 12px; }    .tg-df-container .hawk-deal-widget-text-body-description { display: block; font-size: 15px; margin-top: 12px; color: #4b5563; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-body-description p { margin: 0; line-height: 1.6; }    .tg-df-container .hawk-deal-widget-text-cta-container { display: flex; flex-direction: column; gap: 12px; width: 100%; flex: 1; min-width: 0; box-sizing: border-box; }    .tg-df-container .hawk-deal-widget-footer { display: flex; justify-content: flex-end; width: 100%; margin-top: auto; }    .tg-df-container .hawk-deal-widget-button-wrapper { display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 100%; }    .tg-df-container .hawk-deal-widget-preferred-partner-wrapper { display: flex; flex-direction: row; }        @container tg-df (min-width: 600px) {      .tg-df-mobile-only { display: none !important; }    }    @container tg-df (max-width: 599px) {      .tg-df-desktop-only { display: none !important; }      .tg-df-grid.layout-replica-2 { grid-template-columns: 1fr !important; }      .tg-df-grid.savings-squad-cards { grid-template-columns: 1fr !important; display: flex; flex-direction: column; }    }    .tg-df-grid.savings-squad-cards .tg-df-card-title {      -webkit-line-clamp: unset !important;      display: block !important;      overflow: visible !important;    }    @container tg-df (max-width: 500px) {      .tg-df-container .hawk-deal-widget-wrap { display: block; }      .tg-df-container .hawk-deal-widget-image-container { display: block; float: left; margin: 0 16px 8px 0; width: 120px; max-width: 120px; height: auto; align-items: normal; justify-content: normal; }      .tg-df-container .hawk-deal-widget-text-cta-container { display: block; text-align: left; }      .tg-df-container .hawk-deal-widget-footer { display: block; margin-top: 16px; clear: both; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-deal-widget-button-wrapper .hawk-deal-widget-preferred-partner-wrapper { display: block; width: 100%; }      .tg-df-container .hawk-affiliate-link-deal-button { box-sizing: border-box !important; display: flex !important; max-width: none !important; width: 100% !important; margin: 0 !important; }    }        .tg-df-container .hawk-affiliate-link-deal-button {       align-items: center; background-color: #5aaf0b; box-sizing: border-box; color: #ffffff !important; display: flex; font-size: 14px; font-weight: 700; justify-content: center; letter-spacing: 0.5px; line-height: 1; min-width: 160px; padding: 14px 24px; text-align: center; text-decoration: none; text-transform: uppercase; width: 100%; word-break: normal; border-radius: 4px; border: 0; transition: background-color 0.2s;     }    .tg-df-container .hawk-affiliate-link-deal-button:hover { background-color: #4a9109; text-decoration: none; }    .tg-df-container .hawk-lazy-image-deal-widget { display: block; height: auto; margin: auto; max-height: 160px; max-width: 100%; mix-blend-mode: multiply; object-fit: contain; }    .tg-df-container .hawk-deal-widget-text-cta-container a { color: #2563eb; text-decoration: none; display: inline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover { text-decoration: underline; }    .tg-df-container .hawk-deal-widget-text-cta-container a:has(.hawk-deal-widget-title-product-title) { color: #111827; }    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-product-title,    .tg-df-container .hawk-deal-widget-text-cta-container a:hover .hawk-deal-widget-title-retailer-price { text-decoration: underline; }  \x3C/style>  \x3C!-- Widget Container --\x3E  \x3Cdiv class="tg-df-container" id="signal-deals-finder-root">    \x3C!-- Editor Floating Bar --\x3E    \x3Cdiv class="tg-df-editor-bar" id="tg-df-editor-bar" style="display:none;">      \x3Cdiv class="tg-df-editor-bar-text" style="display: flex; align-items: center;">        \x3Cspan id="tg-df-selected-count">0\x3C/span>\x26nbsp;Deals Selected        \x3Cbutton class="tg-df-editor-clear-btn" id="tg-df-editor-clear" type="button" style="margin-left: 12px; font-size: 13px; color: #9ca3af; background: none; border: none; cursor: pointer; text-decoration: underline;">Clear All\x3C/button>      \x3C/div>      \x3Cbutton class="tg-df-editor-copy-btn" id="tg-df-editor-copy" type="button">        \x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">\x3C/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">\x3C/path>\x3C/svg>        Copy to CMS      \x3C/button>    \x3C/div>    \x3Cdiv class="tg-df-carousel-host" id="tg-df-carousel-host" style="display: none;">      \x3Cdiv class="tg-df-carousel-eyebrow">DEAL FINDER\x3C/div>      \x3Cdiv class="tg-df-carousel-query-title" id="tg-df-carousel-title-label">Best Deals\x3C/div>            \x3Cdiv class="tg-df-carousel-blue-box">        \x3Cdiv class="tg-df-carousel-bg-circle-1" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-2" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-bg-circle-3" aria-hidden="true">\x26nbsp;\x3C/div>        \x3Cdiv class="tg-df-carousel-box-content">          \x3Cdiv class="tg-df-countdown-wrapper" id="tg-df-countdown-wrapper" style="display:none;">            \x3Cdiv class="tg-df-countdown-title" id="tg-df-countdown-title">Prime Day starts in\x3C/div>            \x3Cdiv class="tg-df-countdown-blocks">              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-days">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">DAYS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-hrs">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">HRS\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-min">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">MIN\x3C/div>\x3C/div>              \x3Cdiv class="tg-df-countdown-item">\x3Cdiv class="tg-df-countdown-box">\x3Cdiv class="tg-df-countdown-num" id="tg-df-cd-sec">0\x3C/div>\x3C/div>\x3Cdiv class="tg-df-countdown-label">SEC\x3C/div>\x3C/div>            \x3C/div>          \x3C/div>          \x3Cdiv class="tg-df-carousel-box-eyebrow">DEAL FINDER\x3C/div>          \x3Cdiv class="tg-df-carousel-box-title">Find Deals Fast\x3C/div>          \x3Cdiv class="tg-df-carousel-box-subtitle">The latest deals from the biggest retailers, all in one place\x3C/div>                    \x3Cdiv class="tg-df-carousel-roundels-wrapper">          \x3Cdiv class="tg-df-carousel-roundels">            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>            \x3Cdiv class="tg-df-roundel tg-df-roundel-skeleton">\x3Cdiv class="tg-df-roundel-img-box tg-df-skeleton">\x3C/div>\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="margin: 4px auto 0 auto; height: 13px; width: 48px;">\x3C/div>\x3C/div>          \x3C/div>          \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: 'smooth'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-carousel-filters-wrap">                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="0">All\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_lightning">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-ot="amazon_prime">              \x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>            \x3Cbutton class="tg-df-carousel-filter-btn" data-d="10">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 10% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="15">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 15% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-d="25">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>            Min 25% off\x3C/button>                      \x3Cbutton class="tg-df-carousel-filter-btn" data-pr="under50">              \x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>            Under $50\x3C/button>\n        \x3C/div>\n      \x3C/div>\n    \x3C/div>          \x3C!-- Search & Filter Controls --\x3E    \x3Cdiv class="tg-df-controls" id="tg-df-controls" style="display:flex;">      \x3Cdiv class="tg-df-top-bar">        \x3Cdiv class="tg-df-search-wrapper">          \x3Cinput type="text" class="tg-df-search-input" placeholder="Search for deals, products, or brands...">          \x3Cbutton type="button" class="tg-df-search-btn" aria-label="Search">              \x3Csvg class="tg-df-search-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">                \x3Cpath d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/>              \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-autocomplete-dropdown" id="tg-df-autocomplete">\x3C/div>        \x3C/div>                \x3Cdiv class="tg-df-settings-wrapper">          \x3Cbutton type="button" class="tg-df-settings-btn" aria-label="Settings" id="tg-df-settings-toggle">            \x3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="20" height="20">                \x3Cpath d="M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.06-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.73 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.06.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .43-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.49-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z"/>            \x3C/svg>          \x3C/button>          \x3Cdiv class="tg-df-settings-dropdown-backdrop" id="tg-df-settings-backdrop">\x3C/div>          \x3Cdiv class="tg-df-settings-dropdown" id="tg-df-settings-panel">            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Search Region\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-region-select">                \x3Coption value="auto">🌍 Auto-detect\x3C/option>                \x3Coption value="US">🇺🇸 United States (US)\x3C/option>                \x3Coption value="GB">🇬🇧 United Kingdom (UK)\x3C/option>                \x3Coption value="CA">🇨🇦 Canada (CA)\x3C/option>                \x3Coption value="AU">🇦🇺 Australia (AU)\x3C/option>                \x3Coption value="DE">🇩🇪 Germany (DE)\x3C/option>                \x3Coption value="FR">🇫🇷 France (FR)\x3C/option>                \x3Coption value="IT">🇮🇹 Italy (IT)\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Retailer\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-retailer-select">                \x3Coption value="">All Retailers\x3C/option>                \x3Coption value="Amazon">Amazon\x3C/option>                \x3Coption value="Walmart">Walmart\x3C/option>                \x3Coption value="Best Buy">Best Buy\x3C/option>                \x3Coption value="Target">Target\x3C/option>                \x3Coption value="John Lewis">John Lewis\x3C/option>                \x3Coption value="Currys">Currys\x3C/option>                \x3Coption value="Argos">Argos\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Offer Type\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-offer-type-select">                \x3Coption value="">All Offers\x3C/option>                \x3Coption value="amazon_prime">Amazon Prime\x3C/option>                \x3Coption value="recommended_promo">Recommended Promo\x3C/option>                \x3Coption value="amazon_lightning">Amazon Lightning Deal\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">Result Count\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-rows-select">                \x3Coption value="3">3 Items\x3C/option>                \x3Coption value="4">4 Items\x3C/option>                \x3Coption value="6">6 Items\x3C/option>                \x3Coption value="12" selected>12 Items\x3C/option>                \x3Coption value="24">24 Items\x3C/option>                \x3Coption value="48">48 Items\x3C/option>              \x3C/select>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Deal Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Only show products with active offers or previous prices (was_price)\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-deal-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item tg-df-dl-row">              \x3Cdiv>                \x3Cspan class="tg-df-dl-row-text">Editor Mode\x3C/span>                \x3Cspan class="tg-df-dl-row-subtext">Enable multi-select to copy deals to CMS\x3C/span>              \x3C/div>              \x3Clabel class="tg-df-toggle">                \x3Cinput type="checkbox" id="tg-df-editor-mode">                \x3Cspan class="tg-df-slider">\x3C/span>              \x3C/label>            \x3C/div>            \x3Cdiv class="tg-df-setting-item">              \x3Clabel class="tg-df-setting-label">View Mode\x3C/label>              \x3Cselect class="tg-df-region-select" id="tg-df-view-mode-select">                \x3Coption value="auto">Auto Collection\x3C/option>                \x3Coption value="carousel">Carousel\x3C/option>                \x3Coption value="savings_squad">Savings Squad\x3C/option>                \x3Coption value="grid">Grid (Columns)\x3C/option>                \x3Coption value="row">Row (List)\x3C/option>              \x3C/select>            \x3C/div>          \x3C/div>        \x3C/div>      \x3C/div>      \x3Cdiv class="tg-df-filters">        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-category-filter-wrapper" style="display: none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-category-filter" aria-label="Category">            \x3Coption value="all">All Categories\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-multiselect-container" id="tg-df-brand-filter-wrapper" style="display:none;">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39A.998.998 0 0 0 18.95 4H5.04c-.83 0-1.3.95-.79 1.61z"/>          \x3C/svg>          \x3Cdiv class="tg-df-filter-select tg-df-multiselect-trigger" id="tg-df-brand-trigger" tabindex="0">            Any Brand          \x3C/div>          \x3Cdiv class="tg-df-multiselect-dropdown" id="tg-df-brand-dropdown">            \x3C!-- Populated via script --\x3E          \x3C/div>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M9 3L5 6.99h3V14h2V6.99h3L9 3zm7 14.01V10h-2v7.01h-3L15 21l4-3.99h-3z"/>          \x3C/svg>          \x3Cselect class="tg-df-sort-select" aria-label="Sort Deals">            \x3Coption value="date_desc">Newest First\x3C/option>            \x3Coption value="best_match">Sort by: Match\x3C/option>            \x3Coption value="price_asc">Price Low to High\x3C/option>            \x3Coption value="price_desc">Price High to Low\x3C/option>            \x3Coption value="discount_desc">Biggest Discount\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper tg-df-price-range-wrapper" id="tg-df-custom-price-wrapper" style="display: flex; align-items:center; justify-content:center; padding: 10px 20px; gap: 8px; border: 1px solid var(--tg-df-border); border-radius: 100px; background-color: var(--tg-df-bg);">          \x3Cspan style="font-size:14px; font-weight:500; color:var(--tg-df-text-primary);">Price\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-min" placeholder="Min" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">          \x3Cspan style="color:var(--tg-df-text-muted)">-\x3C/span>          \x3Cinput type="number" class="tg-df-price-input" id="tg-df-custom-price-max" placeholder="Max" style="width: 48px; background: transparent; border: none; color: var(--tg-df-text-primary); outline: none; font-size: 14px; text-align: center; padding: 0;">        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-legacy-price-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-price-filter" aria-label="Filter Prices">            \x3Coption value="all">All Prices\x3C/option>            \x3Coption value="under50">Under $50\x3C/option>            \x3Coption value="50_100">$50 - $100\x3C/option>            \x3Coption value="100_200">$100 - $200\x3C/option>            \x3Coption value="200_500">$200 - $500\x3C/option>            \x3Coption value="over500">Over $500\x3C/option>          \x3C/select>        \x3C/div>        \x3Cdiv class="tg-df-sort-wrapper" id="tg-df-discount-filter-wrapper">          \x3Csvg class="tg-df-sort-icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">            \x3Cpath d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7z"/>          \x3C/svg>          \x3Cselect class="tg-df-filter-select" id="tg-df-discount-filter" aria-label="Discount Amount">            \x3Coption value="all">Any discount\x3C/option>            \x3Coption value="5">Min 5%\x3C/option>            \x3Coption value="10">Min 10%\x3C/option>            \x3Coption value="15">Min 15%\x3C/option>            \x3Coption value="20">Min 20%\x3C/option>            \x3Coption value="25">Min 25%\x3C/option>            \x3Coption value="30">Min 30%\x3C/option>            \x3Coption value="40">Min 40%\x3C/option>            \x3Coption value="50">Min 50%\x3C/option>            \x3Coption value="60">Min 60%\x3C/option>            \x3Coption value="70">Min 70%\x3C/option>          \x3C/select>        \x3C/div>      \x3C/div>    \x3C/div>    \x3C!-- Deals Grid Wrapper --\x3E    \x3Cdiv class="tg-df-grid-wrapper tg-df-carousel-cards-wrapper" id="tg-df-grid-wrapper">      \x3Cdiv class="tg-df-grid" id="tg-df-grid">        \x3C!-- Content populated by JavaScript --\x3E      \x3C/div>    \x3C/div>        \x3C!-- Vouchers Modal --\x3E    \x3Cdiv class="tg-df-modal-backdrop" id="tg-df-vouchers-modal">      \x3Cdiv class="tg-df-modal">        \x3Cdiv class="tg-df-modal-header">          \x3Ch3 class="tg-df-modal-title" id="tg-df-vouchers-title">Available Coupons & Deals\x3C/h3>          \x3Cbutton class="tg-df-modal-close" id="tg-df-vouchers-close">            \x3Csvg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">              \x3Cline x1="18" y1="6" x2="6" y2="18">\x3C/line>              \x3Cline x1="6" y1="6" x2="18" y2="18">\x3C/line>            \x3C/svg>          \x3C/button>        \x3C/div>        \x3Cdiv class="tg-df-modal-body" id="tg-df-vouchers-content">          \x3C!-- Vouchers injected here --\x3E        \x3C/div>      \x3C/div>    \x3C/div>  \x3C/div>`;      if (!template) {        template = document.createElement('template');        template.innerHTML = rawTemplate;      }      let shadowRoot = null;      if (hostContainer && template) {        hostContainer.setAttribute('data-initialized', 'true');        shadowRoot = hostContainer.attachShadow({ mode: 'open' });        shadowRoot.appendChild(template.content.cloneNode(true));      }      class DealsFinderWidget {        constructor(config) {          this.rootNode = config.rootNode || document;          this.hostContainer = config.hostContainer || null;          this.rootId = config.rootId || 'signal-deals-finder-root';          this.root = this.rootNode.querySelector('#' + this.rootId);          if (!this.root) return;          this.widgetId = (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'widget-' + Date.now() + '-' + Math.random().toString(36).slice(2);          this.grid = this.root.querySelector('#tg-df-grid');          this.tagsContainer = this.root.querySelector('#tg-df-tags-container');          this.categoryFilter = this.root.querySelector('#tg-df-category-filter');          this.categoryFilterWrapper = this.root.querySelector('#tg-df-category-filter-wrapper');          this.searchInput = this.root.querySelector('.tg-df-search-input');          this.autocompleteDropdown = this.root.querySelector('#tg-df-autocomplete');          this.sortSelect = this.root.querySelector('.tg-df-sort-select');          this.searchBtn = this.root.querySelector('.tg-df-search-btn');                    this.settingsToggle = this.root.querySelector('#tg-df-settings-toggle');          this.settingsPanel = this.root.querySelector('#tg-df-settings-panel');          this.settingsBackdrop = this.root.querySelector('#tg-df-settings-backdrop');          this.regionSelect = this.root.querySelector('#tg-df-region-select');          this.retailerSelect = this.root.querySelector('#tg-df-retailer-select');          this.offerTypeSelect = this.root.querySelector('#tg-df-offer-type-select');          this.viewModeSelect = this.root.querySelector('#tg-df-view-mode-select');          this.rowsSelect = this.root.querySelector('#tg-df-rows-select');          this.dealModeToggle = this.root.querySelector('#tg-df-deal-mode');          this.editorModeToggle = this.root.querySelector('#tg-df-editor-mode');          this.priceFilter = this.root.querySelector('#tg-df-price-filter');          this.discountFilter = this.root.querySelector('#tg-df-discount-filter');                    this.editorBar = this.root.querySelector('#tg-df-editor-bar');          this.editorSelectedCount = this.root.querySelector('#tg-df-selected-count');          this.editorCopyBtn = this.root.querySelector('#tg-df-editor-copy');          this.editorClearBtn = this.root.querySelector('#tg-df-editor-clear');                    this.apiUrl = 'https://search-api.fie.future.net.uk/widget.php';          this.deals = [];          this.displayLimit = 12;          this.airedaleArticles = null;          this.airedaleTags = [];          this.airedaleTagCounts = {};          this.activeDealTag = null;          this.selectedBrands = [];          this.currentQuery = '';          this.editorMode = this.hostContainer ? this.hostContainer.hasAttribute('data-editor-mode') : false;          this.viewModeOverride = this.hostContainer ? this.hostContainer.getAttribute('data-view-mode') : null;          this.selectedDeals = new Map();                    this.brandFilterWrapper = this.root.querySelector('#tg-df-brand-filter-wrapper');          this.brandTrigger = this.root.querySelector('#tg-df-brand-trigger');          this.brandDropdown = this.root.querySelector('#tg-df-brand-dropdown');                    this.customPriceWrapper = this.root.querySelector('#tg-df-custom-price-wrapper');          this.customPriceMin = this.root.querySelector('#tg-df-custom-price-min');          this.customPriceMax = this.root.querySelector('#tg-df-custom-price-max');          this.legacyPriceWrapper = this.root.querySelector('#tg-df-legacy-price-wrapper');          this.discountFilterWrapper = this.root.querySelector('#tg-df-discount-filter-wrapper');          this.initResizeObserver();          this.init();            if (['carousel', 'carousel-compact', 'auto', 'grid', 'row'].includes(this.getViewMode())) { this.loadCarouselSpreadsheet(); }        }        getViewMode() {          if (this.viewModeOverride && (!this.editorMode || !this.viewModeSelect)) {            return this.viewModeOverride;          }          return (this.viewModeSelect && this.viewModeSelect.value) ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');        }        applyLayoutMode() {          if (!this.grid) return;          const mode = this.getViewMode();          this.grid.classList.remove('layout-row', 'layout-grid', 'tg-df-grid-auto', 'carousel-compact', 'layout-replica-1', 'layout-replica-2');                    const carouselHost = this.root.querySelector('#tg-df-carousel-host');          const controlsDiv = this.root.querySelector('#tg-df-controls');          if (mode === 'carousel' || mode === 'auto' || mode === 'grid' || mode === 'row') {             if (mode === 'carousel') this.grid.classList.add('carousel-compact');             if (carouselHost) carouselHost.style.display = 'block';             if (controlsDiv) controlsDiv.style.display = 'none';             if (this.root.classList.contains('tg-df-container') && mode === 'carousel') {               this.root.classList.add('is-carousel');             } else if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          } else {             if (carouselHost) carouselHost.style.display = 'none';             if (controlsDiv) controlsDiv.style.display = 'flex';             if (this.root.classList.contains('tg-df-container')) {               this.root.classList.remove('is-carousel');             }          }          if (mode === 'grid') {            this.grid.classList.add('layout-grid');          } else if (mode === 'row') {            this.grid.classList.add('layout-row');          } else if (mode === 'savings_squad') {            this.grid.classList.add('tg-df-grid-auto', 'savings-squad-cards');          } else if (mode !== 'carousel') {            this.grid.classList.add('tg-df-grid-auto');          }                    const settingsWrapper = this.root.querySelector('.tg-df-settings-wrapper');          if (settingsWrapper) {            settingsWrapper.style.display = mode === 'auto' ? 'none' : 'block';          }          if (this.customPriceWrapper) {             this.customPriceWrapper.style.display = mode === 'auto' ? 'flex' : 'none';          }          if (this.legacyPriceWrapper) {             this.legacyPriceWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }          if (this.discountFilterWrapper) {             this.discountFilterWrapper.style.display = mode === 'auto' ? 'none' : 'flex';          }        }        initResizeObserver() {          try {            if (window.parent === window) return;          } catch (e) {            // cross origin frame check threw          }          const emitHeight = () => {            try {              const height = document.documentElement.scrollHeight || document.body.scrollHeight;              const msg = { type: 'embed-size', height: height };              if (window.parent && window.parent !== window) {                window.parent.postMessage(msg, '*');                window.parent.postMessage(JSON.stringify({ ...msg, sentinel: 'amp' }), '*');              }            } catch (e) {}          };                    if (window.ResizeObserver) {            try {              const ro = new ResizeObserver(() => emitHeight());              ro.observe(document.body);              if (this.root) ro.observe(this.root);            } catch(e){ console.warn(e); }          }          window.addEventListener('resize', emitHeight);          setTimeout(emitHeight, 300);        }        initCountdown() {          this.cdWrapper = this.root.querySelector('#tg-df-countdown-wrapper');                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          this.showCountdown = params.get('show_countdown') === 'true';          const showHeaderDetails = params.get('show_header_details') !== 'false';          const eyebrow = this.root.querySelector('.tg-df-carousel-box-eyebrow');          const title = this.root.querySelector('.tg-df-carousel-box-title');          const subtitle = this.root.querySelector('.tg-df-carousel-box-subtitle');          if (!showHeaderDetails) {            let containerElement = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (containerElement) containerElement.classList.add('hide-header-details');            if (eyebrow) eyebrow.style.display = 'none';            if (title) title.style.display = 'none';            if (subtitle) subtitle.style.display = 'none';          }          if (!this.cdWrapper) return;          this.cdTitle = this.root.querySelector('#tg-df-countdown-title');          this.cdDays = this.root.querySelector('#tg-df-cd-days');          this.cdHrs = this.root.querySelector('#tg-df-cd-hrs');          this.cdMin = this.root.querySelector('#tg-df-cd-min');          this.cdSec = this.root.querySelector('#tg-df-cd-sec');          this.updateCountdown();          this.cdInterval = setInterval(() => this.updateCountdown(), 1000);        }        updateCountdown() {          if (!this.cdWrapper) return;          if (!this.showCountdown) {            this.cdWrapper.style.display = 'none';            return;          }          const area = this.getAreaCode();          let offset = '-04:00';          if (['DE', 'FR', 'IT', 'ES', 'NL'].includes(area)) {             offset = '+02:00';          } else if (['GB', 'IE', 'UK'].includes(area)) {             offset = '+01:00';          }          const startTime = new Date('2026-06-23T00:00:00' + offset).getTime();          const endTime = new Date('2026-06-26T00:00:00' + offset).getTime();          const now = Date.now();          let targetTime = 0;          if (now < startTime) {             targetTime = startTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day starts in';             this.cdWrapper.style.display = 'flex';          } else if (now < endTime) {             targetTime = endTime;             if (this.cdTitle) this.cdTitle.textContent = 'Prime Day ends in';             this.cdWrapper.style.display = 'flex';          } else {             this.cdWrapper.style.display = 'none';             if (this.cdInterval) clearInterval(this.cdInterval);             return;          }          const diff = Math.max(0, targetTime - now);          const d = Math.floor(diff / (1000 * 60 * 60 * 24));          const h = Math.floor((diff / (1000 * 60 * 60)) % 24);          const m = Math.floor((diff / 1000 / 60) % 60);          const s = Math.floor((diff / 1000) % 60);          if (this.cdDays) this.cdDays.textContent = d;          if (this.cdHrs) this.cdHrs.textContent = h;          if (this.cdMin) this.cdMin.textContent = m;          if (this.cdSec) this.cdSec.textContent = s;        }        init() {          this.initCountdown();          try {            initAnalytics();          } catch (e) {            console.warn('Deals Widget Analytics Error:', e);          }                    this.bindEvents();                    let initialQuery = '';                    let searchSource = window.location.search;          if (this.hostContainer && this.hostContainer.hasAttribute('data-widget-config')) {            searchSource = this.hostContainer.getAttribute('data-widget-config');          } else if (typeof window !== 'undefined' && window.__WIDGET_CONFIG__) {            searchSource = window.__WIDGET_CONFIG__;          }          const params = new URLSearchParams(searchSource);          let initialViewMode = params.get('view_mode');          if (!params.has('search') && !params.has('q') && !params.has('query') && initialViewMode !== 'savings_squad') {             initialQuery = 'Everything';             if (this.discountFilter && !params.has('min_discount_ratio')) {               this.discountFilter.value = '5';             }          }                    if (this.regionSelect) {            this.regionSelect.value = params.get('region') || 'auto';            this.updatePriceDropdownCurrency();          }                    if (this.retailerSelect && params.has('retailer')) {            this.retailerSelect.value = params.get('retailer');          }                    if (params.has('brands')) {            const b = params.get('brands');            if (b) {              this.selectedBrands = b.split(',');            }          }                    if (this.offerTypeSelect && params.has('offer_type')) {            this.offerTypeSelect.value = params.get('offer_type');          }          if (params.has('bg_color')) {            const bg = params.get('bg_color');            if (bg === 'white') {              this.root.style.setProperty('background-color', '#ffffff', 'important');            } else if (bg === 'transparent') {              this.root.style.setProperty('background-color', 'transparent', 'important');            } else if (bg === 'light_blue') {              this.root.style.setProperty('background-color', '#E7F0FF', 'important');            }          } else {             this.root.style.removeProperty('background-color');          }                    if (params.has('view_mode')) {            if (this.viewModeSelect) {              this.viewModeSelect.value = params.get('view_mode');            } else {              this.viewModeOverride = params.get('view_mode');            }          }          if (this.rowsSelect && params.has('rows')) {            this.rowsSelect.value = params.get('rows');          }          if (params.has('price')) {            const priceVal = params.get('price');            if (this.priceFilter) {               // Try assigning it directly to select. If it's not present implicitly ignores               this.priceFilter.value = priceVal;            }            if (priceVal.includes('_')) {               const parts = priceVal.split('_');               if (this.customPriceMin && parts[0]) this.customPriceMin.value = parts[0];               if (this.customPriceMax && parts[1]) this.customPriceMax.value = parts[1];            }          }          if (this.discountFilter && params.has('min_discount_ratio')) {            // Need to convert back from ratio (e.g. 0.8) to select value (e.g. "20")            const ratioStr = params.get('min_discount_ratio');            const ratioFloat = parseFloat(ratioStr);            if (!isNaN(ratioFloat)) {               const percentage = Math.round((1 - ratioFloat) * 100);               this.discountFilter.value = percentage.toString();            }          }          if (this.sortSelect) {            this.sortSelect.value = params.get('sort') || 'discount_desc';          }          if (this.dealModeToggle && params.has('deal_mode')) {            this.dealModeToggle.checked = params.get('deal_mode') === 'true' || params.get('deal_mode') === '1';          }                    // Re-apply layout after params have updated control values          this.applyLayoutMode();                    if (params.get('search')) {            initialQuery = params.get('search');          } else if (params.get('q')) {            initialQuery = params.get('q');          } else if (params.get('query')) {            initialQuery = params.get('query');          }                    this.currentQuery = initialQuery;          if (this.searchInput) {            this.searchInput.value = this.currentQuery;          }                    if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {            this.fetchDeals(this.currentQuery);          } else {            this.render();          }        }        updatePriceDropdownCurrency() {          if (!this.priceFilter || !this.regionSelect) return;          const currencySymbols = {            'US': '$',            'GB': '£',            'CA': '$CA',            'AU': '$AU',            'DE': '€',            'FR': '€',            'IT': '€',          };          const area = this.getAreaCode();          const cur = currencySymbols[area || 'US'] || '$';                    const options = this.priceFilter.options;          for (let i = 0; i < options.length; i++) {            const opt = options[i];            if (opt.value === 'all') {              opt.innerText = 'All Prices';            } else if (opt.value === 'under50') {              opt.innerText = `Under ${cur}50`;            } else if (opt.value === '50_100') {              opt.innerText = `${cur}50 - ${cur}100`;            } else if (opt.value === '100_200') {              opt.innerText = `${cur}100 - ${cur}200`;            } else if (opt.value === '200_500') {              opt.innerText = `${cur}200 - ${cur}500`;            } else if (opt.value === 'over500') {              opt.innerText = `Over ${cur}500`;            }          }        }        populateBrandDropdown(values) {          if (!this.brandDropdown || !this.brandFilterWrapper) return;          this.brandFilterWrapper.style.display = 'flex'; // show the wrapper                    let html = '';          const allChecked = this.selectedBrands.length === 0 ? 'checked' : '';          const _div = '<' + '/div>';          const _span = '<' + '/span>';          html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="" ${allChecked} class="tg-df-brand-chk"> Any Brand${_div}`;                    values.forEach(v => {             if (!v.formatted_value || v.formatted_value === 'Any Brand') return;             const isChecked = this.selectedBrands.includes(v.formatted_value) ? 'checked' : '';             html += `\x3Cdiv class="tg-df-ms-option">\x3Cinput type="checkbox" value="${this.escapeHTML(v.formatted_value)}" ${isChecked} class="tg-df-brand-chk"> ${this.escapeHTML(v.formatted_value)} \x3Cspan style="color:var(--tg-df-text-muted);font-size:12px">(${v.count || 0})${_span}${_div}`;          });                    this.brandDropdown.innerHTML = html;                    // Re-bind listeners          const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');          chks.forEach(chk => {            chk.addEventListener('change', (e) => {              const val = e.target.value;              if (val === '') {                this.selectedBrands = [];              } else {                if (e.target.checked) {                   if (!this.selectedBrands.includes(val)) this.selectedBrands.push(val);                } else {                   this.selectedBrands = this.selectedBrands.filter(b => b !== val);                }              }                            if (this.selectedBrands.length === 0) {                 this.brandTrigger.innerText = 'Any Brand';              } else if (this.selectedBrands.length === 1) {                 this.brandTrigger.innerText = this.selectedBrands[0];              } else {                 this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;              }                            // Only call API if changed from UI interactions              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.updateURLParams();                 this.fetchDeals(this.currentQuery);              }            });          });                    // Update button text on load          if (this.selectedBrands.length === 0) {             this.brandTrigger.innerText = 'Any Brand';          } else if (this.selectedBrands.length === 1) {             this.brandTrigger.innerText = this.selectedBrands[0];          } else {             this.brandTrigger.innerText = `${this.selectedBrands.length} Brands selected`;          }        }        updateURLParams() {          const url = new URL(window.location);          if (this.currentQuery && this.currentQuery !== 'Gaming laptops') {            url.searchParams.set('q', this.currentQuery);          } else {            url.searchParams.delete('q');            url.searchParams.delete('search');            url.searchParams.delete('query');          }                    if (this.regionSelect && this.regionSelect.value !== 'auto') {            url.searchParams.set('region', this.regionSelect.value);          } else {            url.searchParams.delete('region');          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.set('retailer', this.retailerSelect.value);          } else {            url.searchParams.delete('retailer');          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.set('brands', this.selectedBrands.join(','));          } else {            url.searchParams.delete('brands');          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.set('offer_type', this.offerTypeSelect.value);          } else {            url.searchParams.delete('offer_type');          }                    if (this.viewModeSelect && this.viewModeSelect.value !== 'auto') {            url.searchParams.set('view_mode', this.viewModeSelect.value);          } else {            url.searchParams.delete('view_mode');          }                    if (this.rowsSelect && this.rowsSelect.value !== '12') {            url.searchParams.set('rows', this.rowsSelect.value);          } else {            url.searchParams.delete('rows');          }                    const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             url.searchParams.set('price', `${min}_${max}`);          } else if (this.priceFilter && this.priceFilter.value !== 'all') {            url.searchParams.set('price', this.priceFilter.value);          } else {            url.searchParams.delete('price');          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {               const ratio = (100 - v) / 100;               url.searchParams.set('min_discount_ratio', ratio.toString());            }          } else {            url.searchParams.delete('min_discount_ratio');          }                    if (this.sortSelect && this.sortSelect.value !== 'discount_desc') {            url.searchParams.set('sort', this.sortSelect.value);          } else {            url.searchParams.delete('sort');          }                    if (this.dealModeToggle && this.dealModeToggle.checked) {            url.searchParams.set('deal_mode', 'true');          } else {            url.searchParams.delete('deal_mode');          }                    window.history.replaceState({}, '', url);        }        bindEvents() {          const roundels = this.root.querySelectorAll('.tg-df-carousel-cat.original-hardcoded');          roundels.forEach(r => {             r.addEventListener('click', () => {                const q = r.getAttribute('data-query');                const pr = r.getAttribute('data-pr');                this.currentQuery = q;                const label = this.root.querySelector('#tg-df-carousel-title-label');                if (label) label.textContent = 'Best ' + q;                if (this.priceFilter) this.priceFilter.value = pr || 'all';                if (this.discountFilter) this.discountFilter.value = '5';                if (this.searchInput) this.searchInput.value = q;                                roundels.forEach(ro => ro.classList.remove('active'));                r.classList.add('active');                this.fetchDeals(this.currentQuery);             });          });          const discBtns = this.root.querySelectorAll('.tg-df-carousel-filter-btn');          discBtns.forEach(b => {             b.addEventListener('click', () => {                const d = b.getAttribute('data-d');                const pr = b.getAttribute('data-pr');                const ot = b.getAttribute('data-ot');                let label = b.innerText ? b.innerText.trim() : '';                let filterType = 'unknown';                let filterVal = 'unknown';                if (d !== null) { filterType = 'discount'; filterVal = d; }                else if (pr !== null) { filterType = 'price'; filterVal = pr; }                else if (ot !== null) { filterType = 'offertype'; filterVal = ot; }                if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-${filterType}-${filterVal}`, name: 'Filter Button', label: label });                                if (d !== null) {                   if (this.discountFilter) this.discountFilter.value = this.discountFilter.value === d ? '0' : d;                } else if (pr !== null) {                   if (this.priceFilter) this.priceFilter.value = this.priceFilter.value === pr ? 'all' : pr;                } else if (ot !== null) {                   if (this.offerTypeSelect) this.offerTypeSelect.value = this.offerTypeSelect.value === ot ? 'all' : ot;                } else {                   if (this.discountFilter) this.discountFilter.value = '0';                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.offerTypeSelect) this.offerTypeSelect.value = 'all';                }                if (d === null && pr === null && ot === null && b.getAttribute("data-type") !== "custom") {                   discBtns.forEach(ro => ro.classList.remove('active'));                   b.classList.add('active');                } else if (b.getAttribute("data-type") !== "custom") {                   // Only operate on hardcoded buttons (those without data-type)                   discBtns.forEach(ro => {                      if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active');                   });                                      let makeActive = true;                   if (d !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-d') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (pr !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-pr') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   } else if (ot !== null) {                       if (b.classList.contains('active')) makeActive = false;                       discBtns.forEach(ro => { if (ro.getAttribute('data-ot') !== null && ro.getAttribute('data-type') !== 'custom') ro.classList.remove('active') });                   }                                      if (makeActive) b.classList.add('active');                                      // Check if anything is active, if not activate "All"                   let anyActive = false;                   discBtns.forEach(ro => { if (ro.classList.contains('active') && ro.getAttribute('data-type') !== 'custom') anyActive = true; });                   if (!anyActive) {                       discBtns.forEach(ro => { if (!ro.getAttribute('data-d') && !ro.getAttribute('data-pr') && !ro.getAttribute('data-ot') && ro.getAttribute('data-type') !== 'custom') ro.classList.add('active'); });                   }                }                                this.fetchDeals(this.currentQuery);             });          });          if (this.brandTrigger && this.brandDropdown) {            this.brandTrigger.addEventListener('click', () => {              this.brandDropdown.classList.toggle('active');            });            document.addEventListener('click', (e) => {              if (this.brandFilterWrapper && !e.composedPath().includes(this.brandFilterWrapper)) {                this.brandDropdown.classList.remove('active');              }            });          }          let debounceTimer;          if(this.searchInput) {            this.searchInput.addEventListener('input', (e) => {              clearTimeout(debounceTimer);              const query = e.target.value.trim();              this.currentQuery = query;              if (this.getViewMode() === 'savings_squad' && this.autocompleteDropdown && this.airedaleTags && query.length > 0) {                 const matches = this.airedaleTags.filter(t => t.toLowerCase().includes(query.toLowerCase()) && t.toLowerCase() !== query.toLowerCase()).slice(0, 5);                 if (matches.length > 0) {                    this.autocompleteDropdown.innerHTML = matches.map(m => `\x3Cdiv class="tg-df-autocomplete-item" data-tag="${this.escapeHTML(m)}">${this.escapeHTML(m)}<` + `/div>`).join('');                    this.autocompleteDropdown.classList.add('active');                 } else {                    this.autocompleteDropdown.classList.remove('active');                 }              } else if (this.autocompleteDropdown) {                 this.autocompleteDropdown.classList.remove('active');              }              debounceTimer = setTimeout(() => {                this.updateURLParams();                if (query.length > 2) {                  this.fetchDeals(query);                } else if (query.length === 0) {                  this.deals = [];                  this.render();                }              }, 400);            });            this.searchInput.addEventListener('keypress', (e) => {              if (e.key === 'Enter') {                if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');                clearTimeout(debounceTimer);                const query = e.target.value.trim();                this.currentQuery = query;                this.activeDealTag = null;                trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });                this.updateURLParams();                if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                   this.fetchDeals(query);                }              }            });          }          if (this.autocompleteDropdown) {             this.autocompleteDropdown.addEventListener('click', (e) => {                const item = e.target.closest('.tg-df-autocomplete-item');                if (item) {                   const tag = item.getAttribute('data-tag');                   this.currentQuery = tag;                   if (this.searchInput) this.searchInput.value = tag;                   this.activeDealTag = tag;                   this.autocompleteDropdown.classList.remove('active');                   this.updateURLParams();                   this.fetchDeals(tag);                }             });             document.addEventListener('click', (e) => {               if (this.autocompleteDropdown && this.searchInput && !e.composedPath().includes(this.searchInput) && !e.composedPath().includes(this.autocompleteDropdown)) {                 this.autocompleteDropdown.classList.remove('active');               }             });          }          if (this.searchBtn) {            this.searchBtn.addEventListener('click', () => {              if (this.autocompleteDropdown) this.autocompleteDropdown.classList.remove('active');              clearTimeout(debounceTimer);              const query = this.searchInput.value.trim();              trackElementInteraction({ id: 'search-submit', name: 'Ask', label: 'Ask (main search)', text: query });              this.activeDealTag = null;              this.currentQuery = query;              this.updateURLParams();              if (query.length > 2 || (this.getViewMode() === 'savings_squad')) {                 this.fetchDeals(query);              }            });          }          if(this.sortSelect) this.sortSelect.addEventListener('change', () => {            trackElementInteraction({ id: `sort-option-${this.sortSelect.value}`, name: 'Sort', label: `Sort: ${this.sortSelect.options[this.sortSelect.selectedIndex].text}` });            this.updateURLParams();            if (this.deals.length > 0) {              this.sortData();              this.render();            }          });                    const priceFilter = this.root.querySelector('#tg-df-price-filter');          if (priceFilter) {            this.priceFilter = priceFilter;            this.priceFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-price-${this.priceFilter.value}`, name: 'Price', label: this.priceFilter.options[this.priceFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          const updateCustomPrice = () => {             this.updateURLParams();             if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);             } else {                this.render();             }          };          if (this.customPriceMin) {             this.customPriceMin.addEventListener('change', updateCustomPrice);             this.customPriceMin.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          if (this.customPriceMax) {             this.customPriceMax.addEventListener('change', updateCustomPrice);             this.customPriceMax.addEventListener('keypress', (e) => {                if (e.key === 'Enter') updateCustomPrice();             });          }          const discountFilter = this.root.querySelector('#tg-df-discount-filter');          if (discountFilter) {            this.discountFilter = discountFilter;            this.discountFilter.addEventListener('change', () => {              trackElementInteraction({ id: `filter-discount-${this.discountFilter.value}`, name: 'Discount', label: this.discountFilter.options[this.discountFilter.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }            });          }          if (this.categoryFilter) {            this.categoryFilter.addEventListener('change', (e) => {               const val = e.target.value === 'all' ? null : e.target.value;               this.activeDealTag = val;               this.fetchSavingsSquad();            });          }                    if (this.settingsToggle) {            this.settingsToggle.addEventListener('click', () => {              const o = this.settingsPanel.classList.toggle('active');              this.settingsBackdrop.classList.toggle('active');              if (o) trackElementInteraction({ id: 'filter-open', name: 'Filters', label: 'Open filters' });            });          }                    if (this.settingsBackdrop) {            this.settingsBackdrop.addEventListener('click', () => {              this.settingsPanel.classList.remove('active');              this.settingsBackdrop.classList.remove('active');            });          }                    if (this.regionSelect) {            this.regionSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-region-${this.regionSelect.value}`, name: 'Region', label: this.regionSelect.options[this.regionSelect.selectedIndex].text });              this.updateURLParams();              this.updatePriceDropdownCurrency();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.retailerSelect) {            this.retailerSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-merchant-${this.retailerSelect.value}`, name: 'Retailer', label: this.retailerSelect.options[this.retailerSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.offerTypeSelect) {            this.offerTypeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-offertype-${this.offerTypeSelect.value}`, name: 'Offer Type', label: this.offerTypeSelect.options[this.offerTypeSelect.selectedIndex].text });              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.viewModeSelect) {            this._prevViewMode = this.viewModeSelect.value;            this.viewModeSelect.addEventListener('change', () => {              trackElementInteraction({ id: `filter-viewmode-${this.viewModeSelect.value}`, name: 'View Mode', label: this.viewModeSelect.options[this.viewModeSelect.selectedIndex].text });                            // Reset all active toggles and filters to prevent config carry-over              this.selectedBrands = [];              if (this.brandTrigger) this.brandTrigger.innerText = 'Select Brands';              if (this.brandDropdown) {                const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                chks.forEach(chk => { chk.checked = false; });              }              if (this.priceFilter) this.priceFilter.value = 'all';              if (this.customPriceMin) this.customPriceMin.value = '';              if (this.customPriceMax) this.customPriceMax.value = '';              if (this.sortSelect) this.sortSelect.value = this.viewModeSelect.value === 'savings_squad' ? 'date_desc' : 'discount_desc';              if (this.discountFilter) this.discountFilter.value = '0';              if (this.retailerSelect) this.retailerSelect.value = '';              if (this.offerTypeSelect) this.offerTypeSelect.value = '';              if (this.rowsSelect) this.rowsSelect.value = '12';              if (this.categoryFilter) this.categoryFilter.value = 'all';              this.activeDealTag = null;              this.updateURLParams();              this.applyLayoutMode();                            if (this.getViewMode() === 'savings_squad' || this._prevViewMode === 'savings_squad') {                this.fetchDeals(this.currentQuery);              } else {                this.render();              }              this._prevViewMode = this.viewModeSelect.value;            });          }                    if (this.rowsSelect) {            this.rowsSelect.addEventListener('change', () => {              this.updateURLParams();              if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {                this.fetchDeals(this.currentQuery);              }            });          }                    if (this.dealModeToggle) {            this.dealModeToggle.addEventListener('change', () => {              this.updateURLParams();              this.render();            });          }          if (this.editorModeToggle) {             this.editorModeToggle.addEventListener('change', (e) => {                this.editorMode = e.target.checked;                this.render();                this.updateFloatingCopyBar();             });          }          if (this.editorCopyBtn) {             this.editorCopyBtn.addEventListener('click', () => {                this.copySelectedDealsToCMS();             });          }          if (this.editorClearBtn) {             this.editorClearBtn.addEventListener('click', () => {                this.selectedDeals.clear();                this.render();                this.updateFloatingCopyBar();             });          }          if (this.grid) {            this.grid.addEventListener('change', (e) => {               if (e.target.classList.contains('tg-df-deal-checkbox')) {                  const dealId = e.target.getAttribute('data-id');                  if (e.target.checked) {                     const dealObj = this.deals.find(d => d.id === dealId);                     if (dealObj) this.selectedDeals.set(dealId, dealObj);                  } else {                     this.selectedDeals.delete(dealId);                  }                  this.updateFloatingCopyBar();               }            });            this.grid.addEventListener('click', (e) => {              const dealCard = e.target.closest('[data-action="deal-click"]');              const similarCard = e.target.closest('[data-action="view-similar-click"]');              const cardLink = dealCard || similarCard;              if (cardLink) {                const productName = cardLink.getAttribute('data-product-name');                const merchantName = cardLink.getAttribute('data-merchant-name');                const productId = cardLink.getAttribute('data-analytics-id');                const price = parseFloat(cardLink.getAttribute('data-price')) || null;                const prevPriceStr = cardLink.getAttribute('data-previous-price');                const previousPrice = prevPriceStr ? parseFloat(prevPriceStr) : null;                const originalLink = cardLink.getAttribute('data-original-link');                const rewrittenLink = cardLink.getAttribute('href');                const revenueId = cardLink.getAttribute('data-revenue-id');                const index = parseInt(cardLink.getAttribute('data-index'), 10) || 0;                const inStock = cardLink.getAttribute('data-in-stock') === 'true';                const totalText = cardLink.getAttribute('data-total');                const totalDeals = parseInt(totalText, 10) || 0;                const productCategoryName = 'deals';                const trackingParams = {                  widgetId: this.widgetId,                  productCategoryName: productCategoryName,                  product: {                    modelId: cardLink.getAttribute('data-model-id') || null,                    matchId: cardLink.getAttribute('data-match-id') || null,                    brand: cardLink.getAttribute('data-model-brand') || null,                    parent: cardLink.getAttribute('data-model-parent') || null,                    name: productName,                    price: price,                    previousPrice: previousPrice,                    link: rewrittenLink,                    originalLink: originalLink,                    inStock: inStock                  },                  zeroBasedProductIndexOrNull: index,                  totalDealsOrProducts: totalDeals,                   merchant: {                    id: cardLink.getAttribute('data-merchant-id') || null,                    network: cardLink.getAttribute('data-merchant-network') || null,                    url: cardLink.getAttribute('data-merchant-url') || null,                    name: merchantName                  },                  revenueId: revenueId,                  widgetTypeName: this.widgetTypeName,                  isoCurrencyCode: normalizeCurrency(this.escapeHTML(cardLink.getAttribute('data-currency') || '$'))                };                if (dealCard) {                  trackDealClick(trackingParams);                } else {                  trackViewSimilarClick(trackingParams);                }              }              const couponsBtn = e.target.closest('[data-action="coupons-click"]');              if (couponsBtn) {                trackElementInteraction({                  id: 'product-card-show-coupons',                  name: 'Coupons',                  label: `Product card coupons: ${couponsBtn.getAttribute('data-merchant')}`                });              }            });          }        }        get widgetTypeName() {          const mode = this.viewModeSelect ? this.viewModeSelect.value : (this.viewModeOverride || 'auto');          switch(mode) {              case 'carousel': return 'Carousel';              case 'savings_squad': return 'Savings Squad';              case 'grid': return 'Grid';              case 'row': return 'Row';              default: return 'Auto Collection';          }        }        getAreaCode() {          if (this.regionSelect && this.regionSelect.value) {            if (this.regionSelect.value === 'auto') return null;            return this.regionSelect.value;          }          let area = null;          try {            const locale = window.navigator.language || window.navigator.userLanguage;            if (locale && locale.includes('-')) {              area = locale.split('-')[1].toUpperCase();            } else if (locale && locale.length === 2) {              if (locale.toUpperCase() === 'EN') { area = 'US'; }              else { area = locale.toUpperCase(); }            }          } catch (e) { /* Ignore */ }                    // Map to known valid options or fallback to US          const valid = ['US', 'GB', 'CA', 'AU', 'DE', 'FR', 'IT'];          if (area === 'UK') area = 'GB';          if (valid.includes(area)) {             return area;          }          return 'US';        }                async loadCarouselSpreadsheet() {          try {              const parseCSVRow = (str) => {                  let result = [], cur = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (inQuotes) {                          if (char === '"') {                              if (str[i + 1] === '"') { cur += '"'; i++; }                              else { inQuotes = false; }                          } else { cur += char; }                      } else {                          if (char === '"') { inQuotes = true; }                          else if (char === ',') { result.push(cur); cur = ''; }                          else { cur += char; }                      }                  }                  result.push(cur); return result;              };              const parseCSV = (str) => {                  const rows = []; let curRow = '', inQuotes = false;                  for (let i = 0; i < str.length; i++) {                      let char = str[i];                      if (char === '"') inQuotes = !inQuotes;                      if ((char === '\n' || char === '\r') && !inQuotes) {                          if (char === '\r' && str[i+1] === '\n') i++;                          if (curRow) rows.push(parseCSVRow(curRow));                          curRow = '';                      } else { curRow += char; }                  }                  if (curRow) rows.push(parseCSVRow(curRow));                  return rows;              };              const preloadedCSV = decodeURIComponent(escape(atob("LCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQ0KUm91bmRlbCB0ZXh0LEFsbCxUVnMsRm9vdHdlYXIsQXBwYXJlbCxNYXR0cmVzZXMsQXBwbGlhbmNlcyxXZWFyYWJsZSB0ZWNoLEhlYWRwaG9uZXMsU21hcnQgSG9tZSxTcGVha2VycyxMYXB0b3BzLFRhYmxldHMsQ29tcHV0aW5nLFBob25lcyxHYW1pbmcsTGVnbw0KUm91bmRlbCBpbWFnZSxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2FpLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3R2cy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvN2IzYTIyNGIwNzk2M2M2MjdiNmI5MDliZDc4MzM4MzZlMDJmZjgxOS5qcGcud2VicCxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy84NGRhYzVkNDhlZDJkNDQ4NTU5ZWJhNjdhY2U4MzE0Y2M2N2NjZDk0LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvbWF0dHJlc3Nlcy5wbmcsaHR0cHM6Ly9pbWFnZXMuZmllLmZ1dHVyZWNkbi5uZXQvcHJvZHVjdHMvNzY4ZTk3Y2ViMDcxODAxZmFlMjA5MTBkMDgyMGIxNmY3NDdhZjkzOS5qcGcud2VicCxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3dlbGxuZXNzLnBuZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL2hlYWRwaG9uZXMuanBnLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzg5NTM1YmVlYmUyMGRiYmQ0YTM0NmQ2ZDZiZGZlOTFkOGE4ODRhMjEuanBnLndlYnAsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9hdWRpby5qcGcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9sYXB0b3BzLmpwZyxodHRwczovL2ltYWdlcy5maWUuZnV0dXJlY2RuLm5ldC9wcm9kdWN0cy8yMzk3NTY0ZWQ3YTVmZjk0N2U5YjZiMzBlNTRmNDc0OTRiODQxZjg5LmpwZy53ZWJwLGh0dHBzOi8vd3d3LnRvbXNndWlkZS5jb20vcHJvZHVjdHMvY2Fyb3VzZWwvY29tcHV0aW5nLmpwZyxodHRwczovL3d3dy50b21zZ3VpZGUuY29tL3Byb2R1Y3RzL2Nhcm91c2VsL3Bob25lcy5wbmcsaHR0cHM6Ly93d3cudG9tc2d1aWRlLmNvbS9wcm9kdWN0cy9jYXJvdXNlbC9nYW1pbmcucG5nLGh0dHBzOi8vaW1hZ2VzLmZpZS5mdXR1cmVjZG4ubmV0L3Byb2R1Y3RzLzRmNmM2MjFjYWMwYmMxYTg1ZDU5M2UzNTk0YmE1YjM0OWVmZmQyOTIuanBnLndlYnANClNlYXJjaCBRdWVyeSxFdmVyeXRoaW5nLFRlbGV2aXNpb25zLCJTbmVha2VycywgcnVubmluZyBzaG9lcywgc2FuZGFscyIsQ2xvdGhpbmcsTWF0dHJlc3NlcyxIb21lIEFwcGxpYW5jZXMsV2VhcmFibGVzICYgRml0bmVzcyBUZWNoLEhlYWRwaG9uZXMsSG9tZSBUZWNoLFNwZWFrZXJzLExhcHRvcHMsVGFibGV0cyxDb21wdXRpbmcsUGhvbmVzLEdhbWluZyxDb25zdHJ1Y3Rpb24gVG95cw0KRGlzY291bnQgQW1vdW50LG1pbiA1JSxtaW4gMTAlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUsbWluIDUlLG1pbiA1JSxtaW4gNSUNClByaWNlIFJhbmdlLCwsLCxtaW4gJDQwMCwsLCxtaW4gJDI1LCxtaW4gJDMwMCwsLG1pbiAkMTAwLCwNCkJyYW5kIFNlbGVjdGlvbiwsLCwsLCwsLCwsLCwsLCwNCkZpbHRlciBidXR0b25zLCwsLCwsLCwsLCwsLCwsLA0KMSxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMsTGlnaHRuaW5nIGRlYWxzLExpZ2h0bmluZyBkZWFscyxMaWdodG5pbmcgZGVhbHMNCjIsQW1hem9uIGRlYWxzLFVuZGVyICQxMDAwLDUwJSBvZmYsQWRpZGFzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsNTAlIG9mZixBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscyxBbWF6b24gZGVhbHMsQW1hem9uIGRlYWxzLEFtYXpvbiBkZWFscw0KMyxPdmVyICQ0MDAsVW5kZXIgJDUwMCxIb2thLE5pa2UsU2FhdHZhLE5pbmphLDQwJSBvZmYsSkxhYiwsSkJMLERlbGwsLEFzdXMsQXBwbGUsQ29uc29sZXMsU3RhciBXYXJzDQo0LFVuZGVyICQxMDAwLDUwJSBvZmYsU2tlY2hlcnMsVW5kZXIgQXJtb3VyLEhlbGl4LFNoYXJrLEdhcm1pbixBbmtlciBTb3VuZGNvcmUsUmluZyxTb25vcyxBcHBsZSxBcHBsZSxUUC1saW5rLFNhbXN1bmcsQWNjZXNzb3JpZXMsVW5kZXIgJDI1DQo1LFVuZGVyICQ1MDAsTEcsQXNpY3MsQ29sdW1iaWEsRHJlYW1DbG91ZCxLZXVyaWcsQXBwbGUsU29ueSxHb3ZlZSxUcmliaXQsTGVub3ZvLFNhbXN1bmcsRWVybyxHb29nbGUsR2FtZXMsVW5kZXIgJDUwDQo2LDUwJSBvZmYsU2Ftc3VuZyxOaWtlLFBhdGFnb25pYSxOZWN0YXIsRGUnTG9uZ2hpLEFtYXpmaXQsQXBwbGUsS2FzYSBzbWFydCxTb255LEFsaWVud2FyZSxUQ0wsTmV0Z2VhcixNb3Rvcm9sYSxOaW50ZW5kbyxCb3RhbmljYWxzDQo3LEFtYXpvbixIaXNlbnNlLE5ldyBCYWxhbmNlLEFyYyd0ZXJ5eCxUZW1wdXItcGVkaWMsRHlzb24sRml0Yml0LEJlYXRzLFBoaWxpcHMgSHVlLEFua2VyLEFjZXIsT25lUGx1cyxEZWxsLE9uZVBsdXMsU29ueSxEaXNuZXkNCjgsQXBwbGUsVENMLEFkaWRhcyxDYXJoYXJ0dCxCZWFyLEJpc3NlbGwsU2Ftc3VuZyxFYXJmdW4sQmxpbmssQmVhdHMsTVNJLE1pY3Jvc29mdCxBY2VyLE5vdGhpbmcsWGJveCxNYXJ2ZWwNCjksLFNvbnksU2F1Y29ueSxUaGUgTm9ydGggRmFjZSxTaWVuYSxOdXRyaWJ1bGxldCxPdXJhLFNhbXN1bmcsR29vZ2xlIE5lc3QgLE1hcnNoYWxsLFNhbXN1bmcsTGVub3ZvLExlbm92bywsLFBva2Vtb24NCjEwLCxSb2t1LEJpcmtlbnN0b2NrLENSWiBZb2dhLFdpbmtCZWRzLEJsYWNrIGFuZCBEZWNrZXIsUmluZ2Nvbm4sQ01GLEV1ZnksU2Ftc3VuZyxNaWNyb3NvZnQsUmVNYXJrYWJsZSxBbGllbndhcmUsLCwNCjExLCwsQnJvb2tzLFRoZSBHeW0gUGVvcGxlLEJyb29rbHluIGJlZGRpbmcsTmVzcHJlc3NvLCwxTW9yZSxBcmxvLCxSYXplciwsQ29yc2FpciwsLA0KMTIsLCxDcm9jcywsRWlnaHQgU2xlZXAsQ3Vpc2luYXJ0LCxKQkwsLCwsLEhQLCwsDQpOb3RlcywsLCwsLCwsLCwsLCwsLCwNCiwsIlByaW9yaXRpc2UgYmlnZ2VzdCAlLyQgZGlzY291bnQsIFR2cyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiB0aGUgbW9zdCBwb3B1bGFyIGV2ZW4gaWYgdGhleSBhcmUgc3RpbGwgZXhwZW5zaXZlIiwiTm8gcGF0dGVybiB0byBwcmljaW5nL2Rpc2NvdW50LCByZWFkZXJzIG1haW5seSBzaG9wIGJ5IGJyYW5kL3JlY29nbmlzYWJsZSBzaG9lcyIsIk5vIHBhdHRlcm4gdG8gcHJpY2luZy9kaXNjb3VudCwgcmVhZGVycyBtYWlubHkgc2hvcCBieSBicmFuZCIsIkEgbGFiZWwgd2lsbCBkZWZpbml0ZWx5IGhlbHAgaGVyZSBlLmcuIGJlc3QgZm9yIHNpZGUgc2xlZXBlciwgYmVzdCBtZW1vcnkgZm9hbSIsIkFwcGxpYW5jZXMgaXMgYSBiaWcgY2F0ZWdvcnksIGlzIGl0IHBvc3NpYmxlIHRvIHNwbGl0IGludG8ga2l0Y2hlbiBhcHBsaWFuY2VzLCBmbG9vcmNhcmUsIGFpciBoZWFsdGgvY29vbGluZz8gT3Igc2ltaWxhciIsIkZvY3VzIG9uIHZhbHVlIGZvciBtb25leSwgR2FybWlucyB3aXRoIH41MCUgb2ZmIGhhdmUgYmVlbiBwb3B1bGFyIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIHN0aWxsICQ1MDAiLCwsLCxJbmNsdWRlIEtpbmRsZXMsSSB3b3VsZCBpbmNsdWRlIHdpZmkgcm91dGVycyBoZXJlIGluc3RlYWQgb2Ygc21hcnQgaG9tZSxDYW4gd2Ugc3VyZmFjZSBwaG9uZSBwcm92aWRlciBkZWFscz8gVC1tb2JpbGUgYW5kIHZlcml6b24gd291bGQgbWFrZSBhIGxvdCBtb3JlIG1vbmV5IHRoYW4gQW1hem9uLCwNCiwsaGF2aW5nIGEgJ2Jlc3QgZm9yJyBsYWJlbCB3b3VsZCBiZSBoZWxwZnVsIGUuZy4gYmVzdCBmb3IgYnJpZ2h0IHJvb20sQ2FuIHdlIHN0b3Aga2lkcyBzaG9lcyBmcm9tIHB1bGxpbmcgdGhyb3VnaD8sIldpbGwgdGhpcyBpbmNsdWRlIGFjY2Vzc29yaWVzIGUuZy4gY2FwcywgYmFncywgaWYgc28gbWFrZSBzdXJlIHRoZXNlIGFyZSBtaXhlZCB0aHJvdWdob3V0IGNsb3RoaW5nIGRlYWxzIixXaWxsIHRoaXMgaW5jbHVkZSB0b3BwZXJzIGFuZCBwaWxsb3dzPyBTZWVpbmcgbW9yZSBtb21lbnR1bSB3aXRoIHRoaXMgY2F0ZWdvcnkgcmVjZW50bHkgc28gYSBiZWRkaW5nIHRhYiBtaWdodCB3b3JrLCwiTmVlZCB0byBtYWtlIHN1cmUgYmFuZHMsIHNjcmVlbiBwcm90ZWN0b3JzIGV0Yy4gZG9uJ3QgcHVsbCBpbnRvIGhlcmUiLCwsLCwsLCwsDQosLCJQcmlvcml0aXNlIDY1JycgYW5kIDU1JyBpbmNoIFRWcywgdGhlbiBiaWdnZXIgc2NyZWVucyBiZWZvcmUgdGhlIHNtYWxsZXIgc2l6ZXMiLCwsUXVlZW4gaXMgdGhlIG1vc3QgcG9wdWxhciBzaXplIGluIHRoZSBVUyAtIHByaW9yaXRpc2UgZGVhbHMgZm9yIHRoaXMgc2l6ZSwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpDYXRlZ29yaWVzIHRvIGNvbnNpZGVyLCxQcm9kdWN0cyBpbmNsdWRlZCwsLCwsLCwsLCwsLCwsDQpVbmRlciAkNTA/LCxBaXIgdGFncywsLCwsLCwsLCwsLCwsDQosLFBvcnRhYmxlIGNoYXJnZXJzL3dpcmVsZXNzIGNoYXJnZXJzLCwsLCwsLCwsLCwsLCwNCiwsIldhdGVyIGJvdHRsZXMgKHN0YW5sZXlzLCBPd2FsYSwgSHlkcm8gZmxhc2ssIFlldGkpIiwsLCwsLCwsLCwsLCwsDQosLEhhbmQgaGVsZCBmYW5zLCwsLCwsLCwsLCwsLCwNCiwsLCwsLCwsLCwsLCwsLCwNCmhvbWUgb2ZmaWNlLCxvZmZpY2UgY2hhaXJzLCwsLCwsLCwsLCwsLCwNCiwsc3RhbmRpbmcgZGVza3MsLCwsLCwsLCwsLCwsLA0KLCxtb25pdG9ycywsLCwsLCwsLCwsLCwsDQosLEtleWJvYXJkcywsLCwsLCwsLCwsLCwsDQosLGRvY2tpbmcgc3RhdGlvbiwsLCwsLCwsLCwsLCwsDQosLCwsLCwsLCwsLCwsLCwsDQpHYW1pbmcsLENvbnNvbGVzLCwsLCwsLCwsLCwsLCwNCiwsQWNjZXNzb3JpZXMsLCwsLCwsLCwsLCwsLA0KLCxHYW1lcywsLCwsLCwsLCwsLCwsDQosLENvdWxkIGluY2x1ZGUgTGVnbz8sLCwsLCwsLCwsLCwsLA==")));              const text = preloadedCSV;              const parsed = parseCSV(text);                            const rowsByName = {};              let filterStart = -1;              parsed.forEach((rc, i) => {                 if (rc && rc.length > 0 && rc[0]) rowsByName[rc[0]] = rc;                 if (rc && rc.length > 0 && rc[0] === 'Filter buttons') filterStart = i;              });                            const cols = [];              if(rowsByName['Roundel text']) {                const headerRow = rowsByName['Roundel text'];                for(let col = 1; col < headerRow.length; col++) {                   let label = headerRow[col];                   if (!label) continue;                                      let q = rowsByName['Search Query'] && rowsByName['Search Query'][col] ? rowsByName['Search Query'][col] : '';                   let img = rowsByName['Roundel image'] && rowsByName['Roundel image'][col] ? rowsByName['Roundel image'][col] : '';                   let ds = rowsByName['Discount Amount'] && rowsByName['Discount Amount'][col] ? rowsByName['Discount Amount'][col] : '';                   let pr = rowsByName['Price Range'] && rowsByName['Price Range'][col] ? rowsByName['Price Range'][col] : '';                   let rt = rowsByName['Retailer'] && rowsByName['Retailer'][col] ? rowsByName['Retailer'][col] : '';                   let ot = rowsByName['Offer Type'] && rowsByName['Offer Type'][col] ? rowsByName['Offer Type'][col] : '';                                      let filters = [];                   if(filterStart > 0) {                     for(let r = filterStart + 1; r < parsed.length; r++) {                         if(!parsed[r] || parsed[r][0] === 'Notes' || parsed[r][0] === 'Categories to consider') break;                         let f = parsed[r][col];                         if(f) filters.push(f);                     }                   }                   cols.push({ label, img, q, ds, pr, rt, ot, filters });                }              }              this.carouselData = cols;              if (this.carouselData && this.carouselData.length > 0) {                 const isMatched = this.carouselData.some(c => c.q === this.currentQuery || c.label === this.currentQuery);                 if (!isMatched) {                    const first = this.carouselData[0];                    this.currentQuery = first.q || first.label;                    if (this.priceFilter) this.priceFilter.value = 'all';                    if (this.customPriceMin) this.customPriceMin.value = '';                    if (this.customPriceMax) this.customPriceMax.value = '';                    let dPr = first.pr || 'all';                    if (typeof dPr === 'string' && dPr !== 'all') {                       let prLower = dPr.toLowerCase();                       if (prLower.includes('min') || prLower.includes('over')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else if (prLower.includes('max') || prLower.includes('under')) {                          let m = dPr.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       }                    }                    let dAm = '0';                    if(first.ds && typeof first.ds === 'string') {                       let m = first.ds.match(/(\d+)/);                       if(m) dAm = m[1];                    }                    if (this.discountFilter) this.discountFilter.value = dAm;                    if (this.offerTypeSelect) this.offerTypeSelect.value = first.ot || '';                    if (this.retailerSelect) this.retailerSelect.value = first.rt || '';                    this.selectedBrands = [];                    if (this.brandDropdown) {                        const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                        chks.forEach(chk => chk.checked = false);                    }                    if (this.searchInput) this.searchInput.value = this.currentQuery;                 }              }              this.renderCarouselUI();          } catch(e){ console.warn(e); }        }                renderCarouselUI() {           const roundelWrapper = this.root.querySelector('.tg-df-carousel-roundels');           if(!roundelWrapper || !this.carouselData) return;                      let html = '';           this.carouselData.forEach(r => {              const q = r.q || r.label;              const isActive = (this.currentQuery === q || this.currentQuery === r.label) ? 'active' : '';              const imgHtml = r.img ? `\x3Cimg src="${r.img}" alt="${r.label}" />` : `\x3Csvg width="32" height="32" fill="#1F69FF" viewBox="0 0 24 24">\x3Cpath d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8z"/>\x3C/svg>`;              html += `                \x3Cdiv class="tg-df-roundel tg-df-carousel-cat ${isActive}" data-label="${this.escapeHTML(r.label)}">                  \x3Cdiv class="tg-df-roundel-img-box">${imgHtml}\x3C/div>                  \x3Cspan class="tg-df-roundel-label">${this.escapeHTML(r.label)}\x3C/span>                \x3C/div>              `;           });           roundelWrapper.innerHTML = html;                      // Rebind clicks           const roundels = this.root.querySelectorAll('.tg-df-carousel-cat');           roundels.forEach(rNode => {             rNode.addEventListener('click', () => {                const r = this.carouselData.find(c => c.label === rNode.getAttribute('data-label'));                if(!r) return;                this.currentQuery = r.q || r.label;                const labelTitle = this.root.querySelector('#tg-df-carousel-title-label');                if (labelTitle) labelTitle.textContent = 'Best ' + this.currentQuery;                if (this.priceFilter) this.priceFilter.value = 'all';                if (this.customPriceMin) this.customPriceMin.value = '';                if (this.customPriceMax) this.customPriceMax.value = '';                let dPr = r.pr || 'all';                if (typeof dPr === 'string' && dPr !== 'all') {                   let prLower = dPr.toLowerCase();                   if (prLower.includes('min') || prLower.includes('over')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMin) this.customPriceMin.value = m[1];                   } else if (prLower.includes('max') || prLower.includes('under')) {                      let m = dPr.match(/(\d+)/);                      if (m && this.customPriceMax) this.customPriceMax.value = m[1];                   }                }                                let discountAmount = '0';                if(r.ds && typeof r.ds === 'string') {                   let m = r.ds.match(/(\d+)/);                   if(m) discountAmount = m[1];                }                if (this.discountFilter) this.discountFilter.value = discountAmount;                if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                                // Clear brands                    this.selectedBrands = [];                    if (this.brandDropdown) {                    const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                    chks.forEach(chk => chk.checked = false);                }                                if (this.searchInput) this.searchInput.value = this.currentQuery;                                roundels.forEach(ro => ro.classList.remove('active'));                if (rNode) rNode.classList.add('active');                                this.renderCarouselFilters(r);                this.fetchDeals(this.currentQuery);             });           });                      // Auto-highlight active           const activeR = this.carouselData.find(c => c.q === this.currentQuery || c.label === this.currentQuery);           if(activeR) this.renderCarouselFilters(activeR);        }                renderCarouselFilters(r) {           const filtersWrap = this.root.querySelector('.tg-df-carousel-filters-wrap');           if(!filtersWrap) return;                      let html = `\x3Cbutton class="tg-df-carousel-filter-btn" data-type="all">All\x3C/button>`;                      r.filters.forEach(f => {              let fL = f.toLowerCase();              let icon = '';              let logic = `data-type="custom" data-v="${this.escapeHTML(f)}"`;              if (fL === 'amazon deals' || fL === 'prime deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/fwoVXvL79turN3Ph535m38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/u75QjVpt3w2EsMimJiRo38-600-100.png" class="active-img" alt="" /> Prime deals\x3C/button>`;              } else if (fL === 'lightning deals') {                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>\x3Cimg src="https://cdn.mos.cms.futurecdn.net/HqAui7w97ft2NPqBtQ5r38-600-100.png" class="inactive-img" alt="" />\x3Cimg src="https://cdn.mos.cms.futurecdn.net/yWPQ5yyQRhUwVKzGwYbh38-600-100.png" class="active-img" alt="" /> Lightning deals\x3C/button>`;              } else {                 if (fL.includes('lightning')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap">\x3Cpolygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2">\x3C/polygon>\x3C/svg>`;                 } else if (fL.includes('% off')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-tag">\x3Cpath d="M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z">\x3C/path>\x3Ccircle cx="7.5" cy="7.5" r=".5" fill="currentColor">\x3C/circle>\x3C/svg>`;                 } else if (fL.includes('under') || fL.includes('min ')) {                    icon = `\x3Csvg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-badge-dollar-sign">\x3Cpath d="M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z">\x3C/path>\x3Cpath d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8">\x3C/path>\x3Cpath d="M12 18V6">\x3C/path>\x3C/svg>`;                 }                 html += `\x3Cbutton class="tg-df-carousel-filter-btn" ${logic}>${icon} ${this.escapeHTML(f)}\x3C/button>`;              }           });                      filtersWrap.innerHTML = html;                      const btns = filtersWrap.querySelectorAll('button');           btns.forEach(b => {             b.addEventListener('click', () => {                const type = b.getAttribute('data-type');                if (type === 'custom') {                   const v = b.getAttribute('data-v');                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: `filter-custom-${(v||'').toLowerCase().replace(/[^a-z0-9]+/g, '-')}`, name: 'Custom Filter', label: v });                }                if (type === 'all') {                   if (typeof trackElementInteraction === 'function') trackElementInteraction({ id: 'filter-clear-all', name: 'Clear all', label: 'Clear all filters' });                   // reset everything                   btns.forEach(btn => btn.classList.remove('active'));                   b.classList.add('active');                                      // Reset prices                   if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   if (this.brandDropdown) {                     const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                     chks.forEach(chk => chk.checked = false);                   }                } else {                   const v = b.getAttribute('data-v');                   const fL = v.toLowerCase();                                      let mapRet = ['amazon', 'walmart', 'best buy', 'target', 'john lewis', 'currys', 'argos'];                   const getCategory = (s) => {                      if (s === 'lightning deals' || s === 'amazon deals' || s === 'prime deals') return 'offer';                      if (s.includes('% off')) return 'discount';                      if (s.includes('under') || s.includes('over') || s.includes('min') || s.includes('max')) return 'price';                      if (mapRet.includes(s)) return 'retailer';                      return 'brand';                   };                   const cat = getCategory(fL);                   const wasActive = b.classList.contains('active');                   if (cat !== 'brand') {                      btns.forEach(btn => {                          if (btn === b) return;                          if (btn.getAttribute('data-type') === 'all') return;                          const bV = btn.getAttribute('data-v');                          if (!bV) return;                          if (getCategory(bV.toLowerCase()) === cat) btn.classList.remove('active');                      });                   }                   if (wasActive) b.classList.remove('active');                   else b.classList.add('active');                   let anyActive = Array.from(btns).some(btn => btn !== btns[0] && btn.classList.contains('active'));                   if (!anyActive) {                       btns[0].click();                       return;                   } else {                       btns[0].classList.remove('active');                   }                                      if (this.priceFilter) this.priceFilter.value = 'all';                   if (this.customPriceMin) this.customPriceMin.value = '';                   if (this.customPriceMax) this.customPriceMax.value = '';                   let dPr = r.pr || 'all';                   if (typeof dPr === 'string' && dPr !== 'all') {                      let prLower = dPr.toLowerCase();                      if (prLower.includes('min') || prLower.includes('over')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMin) this.customPriceMin.value = m[1];                      } else if (prLower.includes('max') || prLower.includes('under')) {                         let m = dPr.match(/(\d+)/);                         if (m && this.customPriceMax) this.customPriceMax.value = m[1];                      }                   }                                      let discountAmount = '0';                   if(r.ds && typeof r.ds === 'string') {                      let m = r.ds.match(/(\d+)/);                      if(m) discountAmount = m[1];                   }                   if (this.discountFilter) this.discountFilter.value = discountAmount;                   if (this.offerTypeSelect) this.offerTypeSelect.value = r.ot || '';                   if (this.retailerSelect) this.retailerSelect.value = r.rt || '';                   this.selectedBrands = [];                   btns.forEach(btn => {                       if (!btn.classList.contains('active') || btn.getAttribute('data-type') === 'all') return;                       const vv = btn.getAttribute('data-v');                       const vl = vv.toLowerCase();                                              if (vl === 'lightning deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_lightning';                       } else if (vl === 'amazon deals' || vl === 'prime deals') {                          if (this.offerTypeSelect) this.offerTypeSelect.value = 'amazon_prime';                       } else if (vl.includes('% off')) {                          let m = vl.match(/(\d+)%/);                          if (m && this.discountFilter) this.discountFilter.value = m[1];                       } else if (vl.includes('under') || vl.includes('max')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMax) this.customPriceMax.value = m[1];                       } else if (vl.includes('min') || vl.includes('over')) {                          let m = vl.match(/(\d+)/);                          if (m && this.customPriceMin) this.customPriceMin.value = m[1];                       } else {                          let foundR = mapRet.find(x => x === vl);                          if (foundR) {                             let realR = ['Amazon', 'Walmart', 'Best Buy', 'Target', 'John Lewis', 'Currys', 'Argos'].find(x => x.toLowerCase() === vl);                             if (this.retailerSelect) this.retailerSelect.value = realR;                          } else {                             this.selectedBrands.push(vv);                          }                       }                   });                                      if (this.brandDropdown) {                       const chks = this.brandDropdown.querySelectorAll('.tg-df-brand-chk');                       chks.forEach(c => c.checked = this.selectedBrands.includes(c.value));                   }                                      if (r.pr && typeof r.pr === 'string') {                       let prL = r.pr.toLowerCase();                       if (prL.includes('under $')) {                           let m = prL.match(/under \$(\d+)/i);                           if (m && this.customPriceMax && !this.customPriceMax.value) this.customPriceMax.value = m[1];                       }                   }                }                                this.fetchDeals(this.currentQuery);             });           });                      // default to highlighting first           btns[0].classList.add('active');        }async fetchDeals(query, append = false) {          if (!append) {             this.showLoading();             this.deals = [];             this.displayLimit = (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          } else {             this.displayLimit += (this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12;          }                    try {            if (this.getViewMode() === 'savings_squad') {               await this.fetchSavingsSquad(append);            } else {               if (this.isBroadQuery(query)) {                 await this.fetchAdviserDeals(query, append);               } else {                 await this.fetchHawkDeals(query, append);                 if (this.deals.length === 0) {                   await this.fetchAdviserDeals(query, append);                 }               }            }          } catch (error) {            console.warn("[Tom's Guide Widget] Fetch error:", error);            this.showError();          }        }        async fetchSavingsSquad() {          let topArticles = this.airedaleArticles;          if (!topArticles) {            const airedaleUrl = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`;            let res;            try {               res = await fetch(airedaleUrl);            } catch(e) {               try { res = await fetch(`https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50`); } catch (err) { console.warn("Fallback fetch failed", err); return; }            }            if (!res.ok) throw new Error('Airedale API Error');            const articles = await res.json();            topArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);            this.airedaleArticles = topArticles;                        let tagCounts = {};            topArticles.forEach((a) => {              let articleTags = new Set();              if (a.articlecategory && Array.isArray(a.articlecategory)) {                 a.articlecategory.forEach((t) => articleTags.add(t));              }              articleTags.forEach(t => {                 tagCounts[t] = (tagCounts[t] || 0) + 1;              });            });                        this.airedaleTags = Object.keys(tagCounts).sort((a, b) => tagCounts[b] - tagCounts[a]);            this.airedaleTagCounts = tagCounts;          }                    let targetArticles = topArticles;          if (this.activeDealTag) {             const encodedTag = encodeURIComponent(this.activeDealTag.toLowerCase().replace(/\s+/g, '-'));             const url = `https://airedale.futurecdn.net/feeds/feed_1776420579726.json?site=tomsguide&articleType=deals&limit=50&articleCategoryHandle=${encodedTag}`;             try {                const res = await fetch(url);                if (res.ok) {                   const articles = await res.json();                   targetArticles = Array.isArray(articles) ? articles.slice(0, 50) : ((articles.data && Array.isArray(articles.data)) ? articles.data.slice(0, 50) : []);                }             } catch(e) {                console.warn("Failed to fetch by activeDealTag", e);             }          }          let extractedDeals = [];          let dynamicBrandsCounts = {};                    targetArticles.forEach((article) => {             if (!article.articlepage) return;                          let pageData = [];             try {                pageData = JSON.parse(article.articlepage[0]);             } catch(e){ console.warn(e); }                          const savingsSquad = pageData.filter((p) => p.type === 'deal' || p.type === 'featured-product');                          savingsSquad.forEach((block, idx) => {                const data = block.data || {};                const isFeatured = block.type === 'featured-product';                                const link = data.link || {};                const priceObj = data.price || {};                const image = data.image || {};                                if (data.brand) {                   data.brand = data.brand.replace(/^\d+\.\s*/, '').trim();                   dynamicBrandsCounts[data.brand] = (dynamicBrandsCounts[data.brand] || 0) + 1;                }                const externalUrl = isFeatured ? data.url : (link.href || null);                let summaryTitle = isFeatured ? (data.name || data.brand) : (data.productName || link.label || article.articlename);                let description = isFeatured ? (data.strapline || '') : (data.text || '');                                if (!isFeatured && !data.productName && data.text) {                   const brSplit = data.text.split(new RegExp('\x3Cbr\\s*\\/?\\x3E', 'i'));                   if (brSplit.length > 1) {                     summaryTitle = brSplit[0].replace(/<[^>]+>/g, '').trim();                     description = brSplit.slice(1).join(' ').replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').trim();                   } else {                     const match = data.text.match(/\x3Cstrong>(.*?)<\/strong>/);                     if (match) {                       summaryTitle = match[1].replace(/<[^>]+>/g, '').trim();                       if (summaryTitle.endsWith(':')) summaryTitle = summaryTitle.slice(0, -1);                     }                   }                }                                let imageUrl = isFeatured ? image.mos : (image.src || null);                if (imageUrl && imageUrl.startsWith('//')) imageUrl = 'https:' + imageUrl;                                description = description.replace(/<br\s*\/?>/gi, ' ').replace(/<\/?(p|div)[^>]*>/gi, ' ').replace(/<[^>]+>/g, '').replace(/\s+/g, ' ').replace(/View Deal$/i, '').trim();                                let merchantName = data.retailer || '';                if (!merchantName && externalUrl) {                   try {                     merchantName = new URL(externalUrl).hostname.replace('www.', '').split('.')[0];                     merchantName = merchantName.charAt(0).toUpperCase() + merchantName.slice(1);                   }catch(e){ console.warn(e); }                }                if (!merchantName) merchantName = 'Retailer';                const q = (this.currentQuery || '').toLowerCase();                const activeTagLogic = (this.activeDealTag || '').toLowerCase();                if (q.length > 2 && q !== activeTagLogic) {                   const searchTarget = `${summaryTitle || ''} ${description || ''}`.toLowerCase();                   if (!searchTarget.includes(q)) return;                }                let rawPrice = 0;                let rawMsrp = 0;                let currencyStr = '$';                if (isFeatured) {                   rawPrice = typeof data.salePrice === 'number' && data.salePrice > 0 ? data.salePrice : (typeof data.price === 'number' ? data.price : 0);                   rawMsrp = typeof data.salePrice === 'number' && typeof data.price === 'number' && data.price > data.salePrice ? data.price : 0;                   currencyStr = data.currency === 'GBP' ? '£' : '$';                } else {                   rawPrice = priceObj.amount ? parseFloat(priceObj.amount) : 0;                   rawMsrp = priceObj.amountWas ? parseFloat(priceObj.amountWas) : 0;                   currencyStr = priceObj.currency === 'GBP' ? '£' : '$';                }                                let savingAmt = 0;                let savingLabel = '';                if (rawPrice > 0 && rawMsrp > rawPrice) {                   savingAmt = parseFloat((rawMsrp - rawPrice).toFixed(2));                   savingLabel = `Save ${currencyStr}${savingAmt}`;                }                                // Apply Brand filter                if (this.selectedBrands && this.selectedBrands.length > 0) {                   const itemBrand = (data.brand || '').toLowerCase();                   const hasMatch = this.selectedBrands.some(sb => sb.toLowerCase() === itemBrand);                   if (!hasMatch) return;                }                // Apply Price filter                let priceFilterVal = null;                const min = this.customPriceMin ? this.customPriceMin.value : '';                const max = this.customPriceMax ? this.customPriceMax.value : '';                if (min || max) {                   priceFilterVal = `${min}_${max}`;                } else if (this.priceFilter && this.priceFilter.value !== 'all') {                   priceFilterVal = this.priceFilter.value;                }                if (priceFilterVal && rawPrice > 0) {                   if (priceFilterVal === 'under50' && rawPrice >= 50) return;                   if (priceFilterVal === 'over50' && rawPrice <= 50) return;                   if (priceFilterVal === 'over30' && rawPrice <= 30) return;                   if (priceFilterVal === 'over500' && rawPrice <= 500) return;                   if (priceFilterVal.includes('_')) {                      const parts = priceFilterVal.split('_');                      const min = parseFloat(parts[0]);                      const max = parseFloat(parts[1]);                      if (!isNaN(min) && rawPrice < min) return;                      if (!isNaN(max) && rawPrice > max) return;                   }                }                // Apply Discount filter                if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {                   const requiredDiscount = parseInt(this.discountFilter.value);                   if (!isNaN(requiredDiscount) && requiredDiscount > 0) {                      if (!rawMsrp || rawMsrp <= rawPrice) return;                      const ratio = Math.round((1 - (rawPrice / rawMsrp)) * 100);                      if (ratio < requiredDiscount) return;                   }                }                                extractedDeals.push({                   id: `airedale-${article.id || Math.random()}-${idx}`,                   url: externalUrl,                   image: imageUrl,                   fallbackImage: imageUrl,                   title: summaryTitle,                   brand: data.brand || '',                   productName: data.productName || '',                   merchant: merchantName,                   rawPrice: rawPrice,                   rawMsrp: rawMsrp,                   price: rawPrice > 0 ? rawPrice.toString() : '',                   msrp: rawMsrp > 0 ? rawMsrp.toString() : '',                   currency: currencyStr,                   isCheckPrice: !rawPrice,                   savingLabel: savingLabel,                   savingType: rawMsrp > rawPrice ? 'amount' : 'none',                   isPrime: false,                   starRating: null,                   description: description,                   text: data.text || ''                });             });          });                    const airedaleBrandsList = Object.keys(dynamicBrandsCounts).map(b => ({              formatted_value: b,              count: dynamicBrandsCounts[b]          })).sort((a,b) => b.count - a.count);                    if (this.getViewMode() === 'savings_squad') {             this.populateBrandDropdown(airedaleBrandsList.slice(0, 15));             if (this.brandFilterWrapper) {                if (airedaleBrandsList.length === 0) {                    this.brandFilterWrapper.style.display = 'none';                } else {                    this.brandFilterWrapper.style.display = 'flex';                }             }          }                    this.deals = extractedDeals;          this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        isBroadQuery(query) {          const q = query.toLowerCase();          const intentModifiers = ['deals', 'best', 'sale', 'under', 'cheap', 'offers', 'discount'];          return intentModifiers.some(term => q.includes(term));        }        async fetchHawkDeals(query, append = false) {          const url = new URL(this.apiUrl);          url.searchParams.append('model_name', query);          const areaCode = this.getAreaCode();          if (areaCode) {            url.searchParams.append('area', areaCode);          }                    if (append && this.deals.length > 0) {            url.searchParams.append('offset', this.deals.length.toString());          }                    if (this.retailerSelect && this.retailerSelect.value) {            url.searchParams.append('filter_merchant_name', this.retailerSelect.value);          }                    if (this.selectedBrands && this.selectedBrands.length > 0) {            url.searchParams.append('filter_label[text_brand]', this.selectedBrands.join(','));          }                    let priceVal = null;          const min = this.customPriceMin ? this.customPriceMin.value : '';          const max = this.customPriceMax ? this.customPriceMax.value : '';          if (min || max) {             priceVal = `${min}_${max}`;          } else if (this.priceFilter && this.priceFilter.value !== 'all') {             priceVal = this.priceFilter.value;          }          if (priceVal) {            if (priceVal === 'under50') {              url.searchParams.append('filter_max_price', '50');            } else if (priceVal === 'over50') {              url.searchParams.append('filter_min_price', '50');            } else if (priceVal === 'over30') {              url.searchParams.append('filter_min_price', '30');            } else if (priceVal === 'over500') {              url.searchParams.append('filter_min_price', '500');            } else if (priceVal.includes('_')) {              const parts = priceVal.split('_');              if (parts[0]) url.searchParams.append('filter_min_price', parts[0]);              if (parts[1]) url.searchParams.append('filter_max_price', parts[1]);            }          }                    if (this.discountFilter && this.discountFilter.value !== 'all' && this.discountFilter.value !== '0') {            const v = parseInt(this.discountFilter.value);            if (!isNaN(v) && v > 0) {              const ratio = (100 - v) / 100;              url.searchParams.append('min_discount_ratio', ratio.toString());            }          }                    if (this.offerTypeSelect && this.offerTypeSelect.value) {            url.searchParams.append('offer', this.offerTypeSelect.value);          }                    url.searchParams.append('filter_product_types', 'deals');                    if (this.rowsSelect && this.rowsSelect.value) {            url.searchParams.append('rows', this.rowsSelect.value);          } else {             url.searchParams.append('rows', '12'); // default          }          let response;          try {             response = await fetch(url.toString());          } catch(e) {             if (window.location.protocol === 'file:') {                console.warn("[Tom's Guide Widget] fetch from file:// blocked by local CORS policy, falling back to Adviser mock.");                await this.fetchAdviserDeals(query);                return;             }             console.warn("Hawk fetch failed", e);             this.deals = [];             this.render();             return;          }          if (!response.ok) {            throw new Error('Hawk API Response Error');          }          const rawData = await response.json();          // Safely locate data array from potentially wrapped response          let offers = [];          let modelInfoArray = [];                    let brandFilterData = null;          if (rawData && rawData.widget && rawData.widget.data && Array.isArray(rawData.widget.data.filters)) {             brandFilterData = rawData.widget.data.filters.find(f => f.type === 'label_text_brand');          } else if (rawData && rawData.data && Array.isArray(rawData.data.filters)) {             brandFilterData = rawData.data.filters.find(f => f.type === 'label_text_brand');          }          if (brandFilterData && Array.isArray(brandFilterData.values) && brandFilterData.values.length > 0) {             this.populateBrandDropdown(brandFilterData.values);          } else {             if (this.brandFilterWrapper && this.selectedBrands.length === 0) {                this.brandFilterWrapper.style.display = 'none';             }          }                    if (rawData && rawData.widget && rawData.widget.data) {            if (Array.isArray(rawData.widget.data.offers)) offers = rawData.widget.data.offers;            if (rawData.widget.data.model_info && typeof rawData.widget.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.widget.data.model_info) ? rawData.widget.data.model_info : Object.values(rawData.widget.data.model_info);            }          } else if (rawData && rawData.data) {            if (Array.isArray(rawData.data.offers)) offers = rawData.data.offers;            if (rawData.data.model_info && typeof rawData.data.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.data.model_info) ? rawData.data.model_info : Object.values(rawData.data.model_info);            }          } else {            if (Array.isArray(rawData)) offers = rawData;            else if (rawData && Array.isArray(rawData.offers)) offers = rawData.offers;            else if (rawData && rawData.offers && Array.isArray(rawData.offers.offer)) offers = rawData.offers.offer;            else if (rawData && rawData.offers) offers = [].concat(rawData.offers);                        if (rawData && rawData.model_info && typeof rawData.model_info === 'object') {              modelInfoArray = Array.isArray(rawData.model_info) ? rawData.model_info : Object.values(rawData.model_info);            }          }          let modelDetails = {};          modelInfoArray.forEach(m => {            const mId = m.model_id || m.id;            if (mId) {              modelDetails[mId] = {                score: m.score != null ? parseFloat(m.score) : null,                brand: m.brand || null,                parent: (m.parents && Array.isArray(m.parents) && m.parents.length > 0) ? m.parents[0].name : null              };            }          });          offers.forEach(item => {            let data = { ...item };            const mId = data.model_id;            if (mId && modelDetails[mId]) {              data.review_score = modelDetails[mId].score;              data.model_brand = modelDetails[mId].brand;              data.model_parent = modelDetails[mId].parent;            } else {              data.review_score = null;            }                        let itemOffers = [];            if (Array.isArray(item.offers)) itemOffers = item.offers;            else if (Array.isArray(item.offer)) itemOffers = item.offer;            else if (item.offers && typeof item.offers === 'object') itemOffers = [item.offers];            else if (item.offer && typeof item.offer === 'object') itemOffers = [item.offer];            if (itemOffers.length > 0) {              itemOffers.forEach(subItem => {                let subData = { ...item, ...subItem };                const subId = subData.model_id;                if (subId && modelDetails[subId]) {                  subData.review_score = modelDetails[subId].score;                  subData.model_brand = modelDetails[subId].brand;                  subData.model_parent = modelDetails[subId].parent;                } else if (data.review_score != null) {                  subData.review_score = data.review_score;                }                if (subData.merchant && typeof subData.merchant === 'object') {                  subData.merchant_name = subData.merchant.name;                }                this.deals.push(this.extractDealData(subData));              });              return;            }                        if (item.merchant && typeof item.merchant === 'object') {              data.merchant_name = item.merchant.name;            }                        this.deals.push(this.extractDealData(data));          });                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        async fetchAdviserDeals(query) {          // ======================================================================          // TODO: ADVISER API REPLACEMENT          // The code below simulates the Adviser API response using mock data.          // Once the real endpoint is ready, remove getAdviserMockData() and           // perform an actual fetch() request similar to fetchHawkDeals().          // Example:          // const area = this.getAreaCode();          // let apiUrl = `https://your-adviser-api.com/search?q=${query}&area=${area}`;          // if (this.priceFilter && this.priceFilter.value !== 'all') {          //   const val = this.priceFilter.value;          //   if (val === 'under50') apiUrl += '&filter_max_price=50';          //   else if (val === '50_100') apiUrl += '&filter_max_price=100';          //   else if (val === '100_200') apiUrl += '&filter_max_price=200';          //   else if (val === '200_500') apiUrl += '&filter_max_price=500';          // }          // const res = await fetch(apiUrl);          // const rawData = await res.json();          // ======================================================================          // Simulating network latency          await new Promise(resolve => setTimeout(resolve, 400));                    const rawData = this.getAdviserMockData();          let offers = [];                    if (rawData && rawData.data && rawData.data.Get && Array.isArray(rawData.data.Get.Deal)) {            offers = rawData.data.Get.Deal;          }                    // Basic client-side filtering for the mock if we want it to react to the query          const q = query.toLowerCase();          const selectedRetailer = (this.retailerSelect && this.retailerSelect.value) ? this.retailerSelect.value.toLowerCase() : null;                    offers.forEach(item => {            const dataObj = item;                        // Apply retailer filter            const itemRetailer = (dataObj.dataRetailer || '').toLowerCase();            if (selectedRetailer && itemRetailer !== selectedRetailer && !itemRetailer.includes(selectedRetailer)) {              return;            }                        // Apply mock price filter            let price = dataObj.dataDiscountedPrice || 0;            if (typeof price === 'string') {              price = parseFloat(price.replace(/[^0-9.]/g, ''));            }            let priceVal = null;            const min = this.customPriceMin ? this.customPriceMin.value : '';            const max = this.customPriceMax ? this.customPriceMax.value : '';            if (min || max) {               priceVal = `${min}_${max}`;            } else if (this.priceFilter && this.priceFilter.value !== 'all') {               priceVal = this.priceFilter.value;            }            if (priceVal) {              if (priceVal === 'under50' && price >= 50) return;              if (priceVal === 'over50' && price <= 50) return;              if (priceVal === 'over30' && price <= 30) return;              if (priceVal === 'over500' && price <= 500) return;              if (priceVal.includes('_')) {                 const parts = priceVal.split('_');                 if (parts[0] && price < parseFloat(parts[0])) return;                 if (parts[1] && price > parseFloat(parts[1])) return;              }            }                        // Map Adviser schema to our widget's expected schema            const mappedData = {              url: dataObj.linkHREF || dataObj.dataLink || '#',              image: dataObj.imageURL || (dataObj.image && dataObj.image.src) || '',              title: dataObj.dataProduct || (dataObj.product && dataObj.product.name) || 'Product Deal',              merchant: dataObj.dataRetailer || 'Retailer',              price: dataObj.dataDiscountedPrice || 0,              currency: dataObj.dataCurrency === 'USD' ? '$' : (dataObj.dataCurrency || '$'),              msrp: dataObj.dataOriginalPrice || null            };                        const titleLow = mappedData.title.toLowerCase();            const merchLow = mappedData.merchant.toLowerCase();                        // Smarter mock filtering            let isMatch = false;            if (q === '' || this.isBroadQuery(q)) {              isMatch = true;            } else if (titleLow.includes(q) || merchLow.includes(q)) {              isMatch = true;            } else if ((q.includes('laptop') || q.includes('mac') || q.includes('pc')) && (titleLow.includes('macbook') || titleLow.includes('laptop'))) {              isMatch = true;            } else if ((q.includes('tv') || q.includes('television')) && (titleLow.includes('tv') || titleLow.includes('oled') || titleLow.includes('qled'))) {              isMatch = true;            } else if ((q.includes('phone') || q.includes('smartphone')) && (titleLow.includes('galaxy') || titleLow.includes('phone'))) {              isMatch = true;            } else if ((q.match(/watch|fitness|run|shoe/)) && (titleLow.includes('forerunner') || titleLow.includes('saucony') || titleLow.includes('watch'))) {              isMatch = true;            }                        if (isMatch) {               this.deals.push(this.extractDealData(mappedData));            }          });                    let rowLimit = 12;          if (this.rowsSelect && this.rowsSelect.value) {            rowLimit = parseInt(this.rowsSelect.value, 10) || 12;          }          // Intentionally omitting the slice here to allow "Load More" to work if the API returns more                    this.sortData();          this.render();          if (typeof trackDealsAppeared !== 'undefined') {             trackDealsAppeared(this.widgetId, this.deals, this.revenueId, typeof this.getAreaCode === 'function' ? (this.getAreaCode() === 'GB' ? 'GBP' : 'USD') : 'USD', this.currentQuery, this.widgetTypeName);          }        }        getAdviserMockData() {          return {            "data": {              "Get": {                "Deal": [                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 300,                    "dataOriginalPrice": 399,                    "dataProduct": "Samsung Galaxy A36",                    "dataRetailer": "Samsung",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/MqDYsukV3JBG54te6dEs7j.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 14,                    "dataOriginalPrice": 24,                    "dataProduct": "Blink Mini",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/3JurmAjHsDa5tPdaHAwEV8.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 59,                    "dataOriginalPrice": 99,                    "dataProduct": "Ring Video Doorbell",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/rAh4uR7AsAsALCCLTXnLNJ.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 10,                    "dataOriginalPrice": 599,                    "dataProduct": "MacBook Neo",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/Lg4Dvg68j9SbB5CPNrTEpH.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 749,                    "dataOriginalPrice": 849,                    "dataProduct": "65\\\" Fire TV Omni 4K QLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/SG34ZWodUkLTxJvMTbjPYR.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 71,                    "dataOriginalPrice": 160,                    "dataProduct": "Saucony Hurricane 24",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/vxf7UD5T2Am7guVzFoFcZ4.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 649,                    "dataOriginalPrice": 749,                    "dataProduct": "Garmin Forerunner 970",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/3GKnEu7CdhtxPMfnPCMCiA.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1049,                    "dataOriginalPrice": 1499,                    "dataProduct": "LG 48\\\" C4 4K OLED TV",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/imvwZV9zoMD6fn9Afuge35.jpg"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 1499,                    "dataOriginalPrice": 2199,                    "dataProduct": "Samsung 49\\\" Odyssey Neo G9 4K Gaming Monitor",                    "dataRetailer": "Amazon",                    "imageURL": "http://cdn.mos.cms.futurecdn.net/XWDEJ5dUAE2nhK8k3Jk7k7.png"                  },                  {                    "dataCurrency": "USD",                    "dataDiscountedPrice": 299,                    "dataOriginalPrice": 699,                    "dataProduct": "EGOHOME Black Memory Foam Mattress (queen)",                    "dataRetailer": "Amazon",                    "imageURL": "https://cdn.mos.cms.futurecdn.net/hMUemtAejNETLVYxNrktzm.jpg"                  }                ]              }            }          };        }        decodeHTML(html) {          if (!html) return '';          const txt = document.createElement("textarea");          txt.innerHTML = String(html);          return txt.value;        }        extractDealData(item) {          const priceRawStr = String(item.price || item.current_price || '0');          const msrpRawStr = String(item.was_price || item.msrp || item.original_price || '0');          const rawPrice = parseFloat(priceRawStr.replace(/[^\d.]/g, '')) || 0;          const rawMsrp = parseFloat(msrpRawStr.replace(/[^\d.]/g, '')) || 0;          const isCheckPrice = rawPrice === 0 || priceRawStr === '0.00' || priceRawStr === '0';                    let originalImageUrl = item.image || item.image_url || item.product_image || '';          let imageUrl = originalImageUrl;          if ((!imageUrl || isCheckPrice) && item.model_image_url) {             imageUrl = item.model_image_url;             originalImageUrl = imageUrl;          } else if ((!imageUrl || isCheckPrice) && item.model_image) {             imageUrl = item.model_image;             originalImageUrl = imageUrl;          }                    if (imageUrl) {            imageUrl = imageUrl.replace(/-(\d+)-(\d+)(\.[a-z.]+)$/i, '$3');          }                    let fallbackImage = '';          if (originalImageUrl && originalImageUrl !== imageUrl) {             fallbackImage = originalImageUrl;          } else if (item.model_image && item.model_image !== imageUrl) {             fallbackImage = item.model_image;          } else if (item.model_image_url && item.model_image_url !== imageUrl) {             fallbackImage = item.model_image_url;          }                    const rawCurrency = item.currency || item.currency_symbol || '$';                    let savingLabel = item.percentage_saving_label || '';          if (!savingLabel && rawMsrp > rawPrice && rawPrice > 0) {            const pct = Math.round(((rawMsrp - rawPrice) / rawMsrp) * 100);            if (pct > 0) {              savingLabel = `${pct}% OFF`;            }          }                    const isPrime = item.shipping && item.shipping.prime === true;                    let scoreRaw = (item.review_score !== undefined && item.review_score !== null && item.review_score > 0) ? parseFloat(item.review_score) : null;          let starRating = 0;          if (scoreRaw !== null) {            starRating = Math.round((scoreRaw > 10 ? scoreRaw / 20 : scoreRaw / 2) * 2) / 2;          }                    return {            id: item.offer_id || item.link || item.url || item.offer_link || Math.random().toString(),            url: item.link || item.url || item.offer_link || '#',            image: imageUrl,            fallbackImage: fallbackImage,            title: item.name || item.title || item.model_name || item.product_name || 'Unknown Product',            brand: item.brand || '',            productName: item.model_name || item.product_name || item.name || '',            merchant: item.merchant_name || item.merchant || item.retailer || 'Retailer',            price: item.price !== undefined ? String(item.price) : '0.00',            currency: this.decodeHTML(rawCurrency),            msrp: item.was_price || item.msrp || item.original_price || null,            rawPrice: rawPrice,            rawMsrp: rawMsrp,            hasWasPrice: (item.was_price !== undefined && item.was_price !== null),            isCheckPrice: isCheckPrice,            savingLabel: savingLabel,            isPrime: isPrime,            starRating: starRating > 0 ? starRating : null,            modelId: item.model_id || '',            productKey: item.product_key || '',            merchantId: (item.merchant && typeof item.merchant === 'object') ? item.merchant.id || '' : '',            matchId: item.match_id || '',            merchantNetwork: (item.merchant && typeof item.merchant === 'object') ? item.merchant.an || '' : '',            merchantUrl: (item.merchant && typeof item.merchant === 'object') ? item.merchant.url || '' : '',            modelBrand: item.model_brand || item.brand || '',            modelParent: item.model_parent || ''          };        }        sortData() {          const sortVal = this.sortSelect ? this.sortSelect.value : (this.getViewMode() === 'savings_squad' ? 'date_desc' : 'discount_desc');          if (sortVal === 'price_asc') {            this.deals.sort((a, b) => a.rawPrice - b.rawPrice);          } else if (sortVal === 'price_desc') {            this.deals.sort((a, b) => b.rawPrice - a.rawPrice);          } else if (sortVal === 'discount_desc') {            this.deals.sort((a, b) => {              const aDiscount = a.rawMsrp > a.rawPrice ? (a.rawMsrp - a.rawPrice) : 0;              const bDiscount = b.rawMsrp > b.rawPrice ? (b.rawMsrp - b.rawPrice) : 0;              return bDiscount - aDiscount;            });          } else if (sortVal === 'date_desc') {             this.deals.sort((a, b) => {                let dateA = 0;                let dateB = 0;                if (a && a.modifiedDate) {                   const valA = Array.isArray(a.modifiedDate) ? a.modifiedDate[0] : a.modifiedDate;                   dateA = new Date(valA).getTime();                   if (isNaN(dateA)) dateA = 0;                }                if (b && b.modifiedDate) {                   const valB = Array.isArray(b.modifiedDate) ? b.modifiedDate[0] : b.modifiedDate;                   dateB = new Date(valB).getTime();                   if (isNaN(dateB)) dateB = 0;                }                return dateB - dateA;             });          }        }        getFilteredDeals() {          let filteredDeals = [...this.deals];                    if (this.dealModeToggle && this.dealModeToggle.checked) {            filteredDeals = filteredDeals.filter(d => d.hasWasPrice || (d.msrp && d.rawMsrp > d.rawPrice));          }                    return filteredDeals;        }        showLoading() {          const _div = '<' + '/div>';          const skeletonCardHtml = `            \x3Cdiv class="tg-df-card">              \x3Cdiv class="tg-df-card-image-box">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-img">${_div}              ${_div}              \x3Cdiv class="tg-df-card-body">                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text title">${_div}                \x3Cdiv class="tg-df-card-footer mt-auto">                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text short" style="height:24px;">${_div}                  \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text" style="height:44px; margin-top:8px;">${_div}                ${_div}              ${_div}            ${_div}`;          this.grid.innerHTML = Array(4).fill(skeletonCardHtml).join('');        }        showError() {          const _div = '<' + '/div>';          this.grid.innerHTML = `\x3Cdiv class="tg-df-message">            An error occurred while finding deals. Please check your connection and try again.          ${_div}`;        }        escapeHTML(str) {          if (!str) return '';          return String(str).replace(/[&<>'"]/g, tag => ({              '&': '&', '<': '<', '>': '>', "'": ''', '"': '"'          }[tag] || tag));        }                bindCouponButtons() {          const btns = this.root.querySelectorAll('.tg-df-tag-coupons');          btns.forEach(btn => {            btn.addEventListener('click', (e) => {              e.preventDefault();              e.stopPropagation();              const merchant = btn.getAttribute('data-merchant');              this.openVouchersModal(merchant);            });          });                    const closeBtn = this.root.querySelector('#tg-df-vouchers-close');          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (closeBtn) {            closeBtn.onclick = () => this.closeVouchersModal();          }          if (backdrop) {            backdrop.onclick = (e) => {              if (e.target === backdrop) this.closeVouchersModal();            };          }        }                closeVouchersModal() {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          if (backdrop) backdrop.classList.remove('active');        }                async checkMerchantsCouponsBulk(merchants) {          if (!merchants || merchants.length === 0) return {};          const controller = new AbortController();          const timeoutId = setTimeout(() => controller.abort(), 4000);          try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchants.join(','));            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '120');            url.searchParams.append('origin', 'widgets-clientside');                        let res; try { res = await fetch(url.toString(), { signal: controller.signal }); } catch (e) { return {}; }            clearTimeout(timeoutId);            if (!res.ok) return {};            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        const foundMerchants = new Set();            offers.forEach(o => {              let mName = o.merchant_name || o.merchant || o.retailer;              if (mName && typeof mName === 'object') mName = mName.name;              if (mName) foundMerchants.add(String(mName).toLowerCase());            });            const resultMap = {};            merchants.forEach(m => {              if (m) resultMap[m] = foundMerchants.has(String(m).toLowerCase());            });            return resultMap;          } catch (e) {            return {};          }        }                async openVouchersModal(merchantName) {          const backdrop = this.root.querySelector('#tg-df-vouchers-modal');          const title = this.root.querySelector('#tg-df-vouchers-title');          const content = this.root.querySelector('#tg-df-vouchers-content');                    if (!backdrop || !content) return;                    // HACK: Hide closing tags          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h4 = '<' + '/h4>';          const _svg = '<' + '/svg>';          const _circle = '<' + '/circle>';          const _polyline = '<' + '/polyline>';          const _rect = '<' + '/rect>';          const _path = '<' + '/path>';                    title.innerText = `${merchantName} Coupons & Deals`;          content.innerHTML = `\x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}                               \x3Cdiv class="tg-df-skeleton tg-df-skeleton-text">${_div}`;          backdrop.classList.add('active');                    try {            const area = this.getAreaCode();            const url = new URL('https://search-api.fie.future.net.uk/widget.php');            url.searchParams.append('model_name', 'Everything');            url.searchParams.append('language', 'en-GB');            if (area) url.searchParams.append('area', area);            url.searchParams.append('combine_product_types', '1');            url.searchParams.append('filter_merchant_name', merchantName);            url.searchParams.append('all_filters', 'false');            url.searchParams.append('exclude_unlabelled', 'false');            url.searchParams.append('include_specs', 'false');            url.searchParams.append('sort', 'voucher');            url.searchParams.append('distinct_merchants', 'natural');            url.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');            url.searchParams.append('rows', '50');            url.searchParams.append('origin', 'widgets-clientside');                        const res = await fetch(url.toString());            if (!res.ok) throw new Error('API Error');            const data = await res.json();                        let offers = [];            if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {              offers = data.widget.data.offers;            } else if (data && data.data && Array.isArray(data.data.offers)) {              offers = data.data.offers;            } else if (Array.isArray(data)) {              offers = data;            } else if (data && Array.isArray(data.offers)) {              offers = data.offers;            } else if (data && data.offers && Array.isArray(data.offers.offer)) {              offers = data.offers.offer;            } else if (data && Array.isArray(data.data)) {              offers = data.data;            }                        if (offers.length === 0) {              content.innerHTML = `\x3Cdiv class="tg-df-message">No vouchers currently available for ${this.escapeHTML(merchantName)}.${_div}`;              return;            }                        content.innerHTML = offers.map(v => {              let offerObj = v;              if (v.offers && v.offers.offer) {                offerObj = Array.isArray(v.offers.offer) ? v.offers.offer[0] : v.offers.offer;              } else if (v.offer) {                offerObj = Array.isArray(v.offer) ? v.offer[0] : v.offer;              }              let logoUrl = v.logo_url || offerObj.logo_url || '';              if (!logoUrl && v.merchant) {                if (Array.isArray(v.merchant) && v.merchant.length > 0) logoUrl = v.merchant[0].logo_url || '';                else logoUrl = v.merchant.logo_url || '';              }                            const offerName = offerObj.name || offerObj.title || v.name || v.title || 'Special Offer';              const endTime = offerObj.end_time || v.end_time || '';              const linkUrl = offerObj.link || offerObj.url || v.link || v.url || '#';                            let foundVoucherCode = '';              const findVoucherCode = (obj) => {                if (!obj || typeof obj !== 'object') return;                if (obj.type === 'voucher_code' && obj.display_value) {                  foundVoucherCode = obj.display_value;                  return;                }                if (Array.isArray(obj)) {                  for (const item of obj) {                    findVoucherCode(item);                    if (foundVoucherCode) return;                  }                } else {                  for (const k in obj) {                    if (Object.prototype.hasOwnProperty.call(obj, k)) {                      findVoucherCode(obj[k]);                      if (foundVoucherCode) return;                    }                  }                }              };              findVoucherCode(offerObj);              if (!foundVoucherCode) findVoucherCode(v);                            const voucherCode = foundVoucherCode || offerObj.voucher_code || v.voucher_code || '';              const codeHtml = voucherCode ? `\x3Cspan class="tg-df-voucher-code" data-action="copy-code" data-code="${this.escapeHTML(voucherCode)}" title="Copy to clipboard">                \x3Cspan class="tg-df-voucher-code-text">${this.escapeHTML(voucherCode)}${_span}                \x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-left:6px;flex-shrink:0;" class="tg-df-voucher-copy-icon">                  \x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2">${_rect}                  \x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1">${_path}                ${_svg}              ${_span}` : '';                            const logoHtml = logoUrl                 ? `\x3Cimg src="${this.escapeHTML(logoUrl)}" alt="${this.escapeHTML(offerName)}" class="tg-df-voucher-logo" />`                 : `\x3Cdiv class="tg-df-voucher-logo" style="background:#e2e8f0;">${_div}`;                            let expiryHtml = '';              if (endTime) {                let dStr = endTime;                if (!isNaN(dStr) && String(dStr).length === 10) dStr = Number(dStr) * 1000;                const d = new Date(dStr);                if (!isNaN(d.getTime())) {                  const options = { year: 'numeric', month: 'short', day: 'numeric' };                  expiryHtml = `                    \x3Cdiv class="tg-df-voucher-expiry">                      \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                        \x3Ccircle cx="12" cy="12" r="10">${_circle}                        \x3Cpolyline points="12 6 12 12 16 14">${_polyline}                      ${_svg}                      Expires ${d.toLocaleDateString(undefined, options)}                    ${_div}`;                }              }              return `                \x3Ca href="${this.escapeHTML(linkUrl)}" target="_blank" rel="noopener nofollow" class="tg-df-voucher-item">                  ${logoHtml}                  \x3Cdiv class="tg-df-voucher-content">                    \x3Ch4 class="tg-df-voucher-title">${this.escapeHTML(offerName)}${_h4}                    ${codeHtml}                    ${expiryHtml}                  ${_div}                ${_a}              `;            }).join('');                        // Attach copy functionality            const copyBtns = content.querySelectorAll('[data-action="copy-code"]');            copyBtns.forEach(btn => {              btn.addEventListener('click', async (e) => {                e.preventDefault();                e.stopPropagation();                                const code = btn.getAttribute('data-code');                if (!code) return;                                try {                  const copyToClipboard = async (text) => {                     if (window.navigator.clipboard && window.isSecureContext) {                        try { await window.navigator.clipboard.writeText(text); return; } catch (e) {}                     }                     const textArea = document.createElement("textarea");                     textArea.value = text;                     textArea.style.position = "fixed";                     document.body.appendChild(textArea);                     textArea.focus();                     textArea.select();                     document.execCommand('copy');                     textArea.remove();                  };                  await copyToClipboard(code);                                    // Visual feedback                  btn.classList.add('copied');                  const textSpan = btn.querySelector('.tg-df-voucher-code-text');                  const iconSvg = btn.querySelector('.tg-df-voucher-copy-icon');                                    const origText = textSpan.innerText;                  const origIcon = iconSvg.innerHTML;                                    textSpan.innerText = 'Copied!';                  iconSvg.innerHTML = `\x3Cpolyline points="20 6 9 17 4 12">${_polyline}`;                                    setTimeout(() => {                    if (btn) {                      btn.classList.remove('copied');                      if (textSpan) textSpan.innerText = origText;                      if (iconSvg) iconSvg.innerHTML = origIcon;                    }                  }, 2000);                                    trackElementInteraction({                    id: 'voucher-code-copy',                    name: 'Copy Voucher Code',                    label: `Copied ${code} for ${merchantName}`                  });                } catch (err) {                  console.warn('Failed to copy text: ', err);                }              });            });                                  } catch (e) {            console.warn(e);            content.innerHTML = `\x3Cdiv class="tg-df-message">Failed to load vouchers.${_div}`;          }        }        render() {          try {            if (this.getViewMode() === 'savings_squad' && this.airedaleTags.length > 0) {              if (this.categoryFilterWrapper) {                 this.categoryFilterWrapper.style.display = 'flex';              }              if (this.categoryFilter) {                 const _option = '<' + '/option>';                 let optionsHtml = `\x3Coption value="all">All Categories${_option}`;                 this.airedaleTags.forEach(tag => {                    const isSelected = this.activeDealTag === tag ? 'selected' : '';                    optionsHtml += `\x3Coption value="${this.escapeHTML(tag)}" ${isSelected}>${this.escapeHTML(tag)} (${this.airedaleTagCounts[tag] || 0})${_option}`;                 });                 this.categoryFilter.innerHTML = optionsHtml;                 this.categoryFilter.value = this.activeDealTag || 'all';              }            } else {               if (this.categoryFilterWrapper) {                  this.categoryFilterWrapper.style.display = 'none';               }            }            const displayDeals = this.getFilteredDeals();          // HACK: Hide closing tags from the CMS HTML sanitizer so it doesn't strip them during in-page injection          const _div = '<' + '/div>';          const _span = '<' + '/span>';          const _a = '<' + '/a>';          const _h3 = '<' + '/h3>';          const _p = '<' + '/p>';          const _strong = '<' + '/strong>';          const _sup = '<' + '/sup>';          const _button = '<' + '/button>';          if (displayDeals.length === 0) {            if (this.currentQuery.length > 2 || (this.getViewMode() === 'savings_squad')) {              if (this.deals.length > 0) {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No deals match your selected filters.                ${_div}`;              } else if (this.getViewMode() === 'savings_squad' && this.currentQuery.length <= 2) {                 // Do not show "no exact matches" if query is empty for savings_squad                 this.grid.innerHTML = '';              } else {                 this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                  No exact matches found for "\x3Cstrong>${this.escapeHTML(this.currentQuery)}${_strong}". Try adjusting your search term.                ${_div}`;              }            } else {              this.grid.innerHTML = `\x3Cdiv class="tg-df-message">                Search product or category names to discover the best deals from across the web.              ${_div}`;            }            return;          }          let dealsHtml = displayDeals.slice(0, this.displayLimit).map((deal, index) => {            try {               const currencySym = this.escapeHTML(deal.currency);               const isoCurrencyCode = normalizeCurrency(currencySym);               const escapedPrice = this.escapeHTML(deal.price);               const escapedMsrp = this.escapeHTML(deal.msrp);               const areaCode = this.getAreaCode();                              const revenueId = generateRevenueId(deal.url, deal.title, deal.merchant, null);               const originalLink = deal.url;               const rewrittenLink = rewriteAffiliateLink(deal.url, areaCode, revenueId);                        const productCategoryName = 'deals';            const dataAttr = `              data-action="${deal.isCheckPrice ? 'view-similar-click' : 'deal-click'}"              data-analytics-id="${this.escapeHTML(deal.externalProductId || deal.id || '')}"              data-product-name="${this.escapeHTML(deal.title)}"              data-merchant-name="${this.escapeHTML(deal.merchant)}"              data-price="${deal.rawPrice || ''}"              data-previous-price="${deal.rawMsrp || ''}"              data-original-link="${this.escapeHTML(originalLink)}"              data-revenue-id="${revenueId}"              data-index="${index}"              data-total="${displayDeals.length}"              data-in-stock="${deal.inStock !== false}"              data-currency="${this.escapeHTML(isoCurrencyCode)}"              data-model-id="${this.escapeHTML(deal.modelId || '')}"              data-product-key="${this.escapeHTML(deal.productKey || '')}"              data-merchant-id="${this.escapeHTML(deal.merchantId || '')}"            `;                        let priceGroupHtml = '';            let isSavingsSquadMode = this.getViewMode() === 'savings_squad';            let ctaText = 'View Deal';            let formattedPrice = '';            let msrpHtml = '';                        if (deal.isCheckPrice) {              ctaText = isSavingsSquadMode ? 'View Deal' : 'Check Price';              if (isSavingsSquadMode) {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                  ${_div}                `;              } else {                priceGroupHtml = `                  \x3Cdiv class="tg-df-card-merchant-wrapper">                    \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                  ${_div}                  \x3Cdiv class="tg-df-card-price-group">                    \x3Cspan class="tg-df-card-price" style="font-size: 15px; font-weight: 500; font-style: italic;">See price at retailer${_span}                  ${_div}                `;              }            } else {              // Format Price              formattedPrice = escapedPrice.includes(currencySym)                 ? escapedPrice                 : `${currencySym}${escapedPrice}`;                              // Format MSRP              msrpHtml = deal.msrp && deal.rawMsrp > deal.rawPrice                ? `\x3Cspan class="tg-df-card-msrp">${escapedMsrp.includes(currencySym) ? escapedMsrp : currencySym + escapedMsrp}${_span}`                : '';                              priceGroupHtml = `                \x3Cdiv class="tg-df-card-merchant-wrapper">                  \x3Cspan class="tg-df-card-merchant-pill" title="${this.escapeHTML(deal.merchant)}">${this.escapeHTML(deal.merchant)}${_span}                ${_div}                \x3Cdiv class="tg-df-card-price-group">                  ${isSavingsSquadMode ? '' : `                  \x3Cspan class="tg-df-card-price">${formattedPrice}${_span}                  ${msrpHtml}                  `}                ${_div}              `;            }                        const discountBadgeHtml = deal.savingLabel && !deal.isCheckPrice              ? `\x3Cspan class="tg-df-card-discount-badge">${this.escapeHTML(deal.savingLabel)}${_span}`              : '';                          // HACK for CMS            const _button = '<' + '/button>';            const _svg = '<' + '/svg>';            const _path = '<' + '/path>';            const _rect = '<' + '/rect>';            const _circle = '<' + '/circle>';            const _polyline = '<' + '/polyline>';            const _line = '<' + '/line>';                        let badgesHtml = '';            const primeBadge = deal.isPrime ? `              \x3Cspan class="tg-df-tag tg-df-tag-prime">                \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="currentColor">                  \x3Cpath d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z">${_path}                ${_svg} Prime              ${_span}            ` : '';                        const couponsBadge = `              \x3Cdiv class="tg-df-coupon-wrapper" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:inline-flex; align-items:center;">                \x3Cdiv class="tg-df-coupon-spinner">${_div}                \x3Cbutton type="button" class="tg-df-tag tg-df-tag-coupons" data-action="coupons-click" data-merchant="${this.escapeHTML(deal.merchant)}" style="display:none;">                  \x3Csvg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">                    \x3Cpath d="M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z">${_path}                    \x3Cline x1="7" y1="7" x2="7.01" y2="7">${_line}                  ${_svg} Coupons                ${_button}              ${_div}            `;                        // Note: We always add coupons badge if there's a chance, but to allow 3-line titles we check wrapper display state            badgesHtml = `              \x3Cdiv class="tg-df-card-badges">                ${primeBadge}                ${couponsBadge}              ${_div}            `;            const _linearGradient = '<' + '/linearGradient>';            const _polygon = '<' + '/polygon>';            const _stop = '<' + '/stop>';            const _defs = '<' + '/defs>';                        let starHtml = '';            if (deal.starRating) {              let rating = deal.starRating;                            if (rating > 0) {                const fullStars = Math.floor(rating);                const halfStar = (rating - fullStars) >= 0.5 ? 1 : 0;                const emptyStars = Math.max(0, 5 - fullStars - halfStar);                const blue = '#1f69ff'; // Tom's guide brand color from VIEW DEAL button                const gray = '#cbd5e1';                                const starSvgFull = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="${blue}" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                const gradId = 'half_grad_' + Math.floor(Math.random()*1000000);                const starSvgHalf = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" stroke="${blue}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cdefs>\x3ClinearGradient id="${gradId}" x1="0" x2="1" y1="0" y2="0">\x3Cstop offset="50%" stop-color="${blue}">${_stop}\x3Cstop offset="50%" stop-color="transparent">${_stop}${_linearGradient}${_defs}                  \x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26" fill="url(#${gradId})">${_polygon}${_svg}`;                                  const starSvgEmpty = `\x3Csvg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="${gray}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpolygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26">${_polygon}${_svg}`;                                let stars = [];                for (let i=0; i<fullStars; i++) stars.push(starSvgFull);                if (halfStar) stars.push(starSvgHalf);                for (let i=0; i<emptyStars; i++) stars.push(starSvgEmpty);                                starHtml = `\x3Cdiv class="tg-df-card-stars" style="display:flex;align-items:center;margin-bottom:8px;font-size:13px;font-weight:600;color:var(--tg-df-text-muted);">                  \x3Cspan style="margin-right:6px;">Tom's Guide:${_span}                  \x3Cdiv style="display:flex;gap:2px;">                    ${stars.join('')}                  ${_div}                ${_div}`;              }            }            let htmlOutput = '';            if (isSavingsSquadMode) {              htmlOutput += `              \x3Cdiv class="hawk-deal-widget-container tg-df-mobile-only" data-collapsible="true">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''} style="margin-bottom: 10px;">` : ''}                \x3Cdiv class="hawk-deal-widget-wrap">                  \x3Cdiv class="hawk-deal-widget-image-container">                    \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" rel="sponsored noopener" target="_blank" class="hawk-affiliate-link-deal-widget" ${dataAttr}>                      \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="hawk-lazy-image-deal-widget" loading="lazy" width="140" height="160" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                    ${_a}                  ${_div}                  \x3Cdiv class="hawk-deal-widget-text-cta-container">                    \x3Cdiv class="hawk-deal-widget-text-body-container">                      \x3Cdiv class="hawk-deal-widget-text-body-main">                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          ${deal.isCheckPrice ? `                            \x3Cspan class="hawk-deal-widget-title-product-title">${this.escapeHTML(deal.title)}${_span}                          ` : `                            \x3Cspan class="hawk-deal-widget-title-product-title">${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_span}                          `}                        ${_a}                        ${!deal.isCheckPrice && deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan class="hawk-deal-widget-title-was-price">was ${currencySym}${escapedMsrp}${_span}                          ${_a}                        ` : ''}                        \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-container" rel="sponsored noopener" target="_blank" ${dataAttr}>                          \x3Cspan class="hawk-deal-widget-title-retailer-price">                            ${!deal.isCheckPrice ? `                              \x3Cspan class="hawk-deal-widget-title-price">now ${formattedPrice}${_span}                              \x3Cspan class="hawk-deal-widget-title-retailer"> at ${this.escapeHTML(deal.merchant)}${_span}                            ` : `                              \x3Cspan class="hawk-deal-widget-title-price">See price at ${this.escapeHTML(deal.merchant)}${_span}                            `}                          ${_span}                        ${_a}                        ${deal.description ? `\x3Cdiv class="hawk-deal-widget-text-body-description">\x3Cp>${this.escapeHTML(deal.description)}${_p}${_div}` : ''}                      ${_div}                    ${_div}                    \x3Cdiv class="hawk-deal-widget-footer">                      \x3Cdiv class="hawk-deal-widget-button-wrapper">                        \x3Cdiv class="hawk-deal-widget-preferred-partner-wrapper">                          \x3Ca data-google-interstitial="false" aria-label="View ${this.escapeHTML(deal.title)} on ${this.escapeHTML(deal.merchant)}" href="${this.escapeHTML(rewrittenLink)}" class="hawk-affiliate-link-deal-button" rel="sponsored noopener" target="_blank" ${dataAttr}>                            \x3Cspan>${deal.isCheckPrice ? 'Check Price' : 'View Deal'}${_span}                          ${_a}                        ${_div}                      ${_div}                    ${_div}                  ${_div}                ${_div}              ${_div}              `;            }            htmlOutput += `              \x3Cdiv class="tg-df-card ${isSavingsSquadMode ? 'tg-df-desktop-only' : ''}">                ${this.editorMode ? `\x3Cinput type="checkbox" class="tg-df-deal-checkbox" data-id="${this.escapeHTML(deal.id)}" ${this.selectedDeals.has(deal.id) ? 'checked' : ''}>` : ''}                \x3Cdiv class="tg-df-card-image-box">                  ${discountBadgeHtml}                  \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" style="display: flex; align-items: center; justify-content: center; width: 100%; height: 100%;">                    \x3Cimg ${deal.image ? `src="${this.escapeHTML(deal.image)}"` : ''} alt="${this.escapeHTML(deal.title)}" class="tg-df-card-image" loading="lazy" onerror="${deal.fallbackImage ? `if(!this.dataset.fb) { this.dataset.fb='1'; this.src='${this.escapeHTML(deal.fallbackImage)}'; } else { this.style.opacity='0'; }` : `this.style.opacity='0';`}">                  ${_a}                ${_div}                \x3Cdiv class="tg-df-card-body">                  ${starHtml}                  ${badgesHtml}                  \x3Ch3 class="tg-df-card-title tg-df-custom-savings-squad-title" title="${this.escapeHTML(deal.title)}">                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" disable-tracking="true" target="_blank" rel="noopener nofollow" style="text-decoration: none; color: inherit;">                      ${isSavingsSquadMode                         ? (deal.isCheckPrice                             ? (deal.title && deal.title.includes(':')                                 ? `\x3Cstrong>${this.escapeHTML(deal.title.substring(0, deal.title.indexOf(':') + 1))}${_strong}\x3Cspan style="color: #1f69ff; font-weight: normal;">${this.escapeHTML(deal.title.substring(deal.title.indexOf(':') + 1))}${_span}`                                : this.escapeHTML(deal.title)                              )                             : `\x3Cstrong>${deal.brand ? this.escapeHTML(deal.brand) + ' ' : ''}${this.escapeHTML(deal.productName || deal.title || '')}:${_strong} ${deal.rawMsrp && deal.rawMsrp > deal.rawPrice ? `\x3Cspan style="color: #d0021b; text-decoration: line-through; font-weight: normal; margin-right: 4px;">was ${currencySym}${escapedMsrp}${_span} ` : ''}\x3Cspan style="color: #1f69ff; font-weight: normal;">now ${formattedPrice} at ${this.escapeHTML(deal.merchant)}${_span}`                          )                        : this.escapeHTML(deal.title)                      }                    ${_a}                  ${_h3}                  ${deal.description ? `\x3Cp style="font-size: 13px; color: var(--tg-df-text-muted); margin-bottom: 12px; line-height: 1.4;">${this.escapeHTML(deal.description)}${_p}` : ''}                  \x3Cdiv class="tg-df-card-footer">                    ${priceGroupHtml}                    \x3Ca href="${this.escapeHTML(rewrittenLink)}" ${dataAttr} target="_blank" rel="noopener nofollow" class="tg-df-card-cta ${isSavingsSquadMode ? 'tg-df-cta-savings-squad' : ''}" style="text-decoration: none;">${ctaText}${_a}                  ${_div}                ${_div}              ${_div}            `;                        return htmlOutput;            } catch (e) {               console.log("Error rendering deal in map for index", index, typeof deal === 'object' ? JSON.stringify(deal) : deal, "MSG:", e.message);               return '';            }          }).join('');                    if (displayDeals.length > this.displayLimit || ((this.getViewMode() === 'carousel' || this.getViewMode() === 'auto') && displayDeals.length > 0 && displayDeals.length % ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12) === 0)) {            if (this.getViewMode() === 'carousel') {               dealsHtml += `                 \x3Cbutton type="button" class="tg-df-load-more-card tg-df-load-more">                   \x3Csvg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-bottom: 8px;">\x3Cpath d="M5 12h14">\x3C/path>\x3Cpath d="m12 5 7 7-7 7">\x3C/path>\x3C/svg>                   Load More                 ${_button}               `;            } else {               dealsHtml += `                 \x3Cdiv style="width: 100%; display: flex; justify-content: center; margin-top: 16px; grid-column: 1 / -1;">                   \x3Cbutton type="button" class="tg-df-tag-outline tg-df-load-more" style="padding: 8px 24px; border-radius: 100px; font-weight: 600; font-size: 14px; cursor: pointer; display: flex; align-items: center;">Load More${_button}                 ${_div}               `;            }          }                    this.grid.innerHTML = dealsHtml;                    let gridWrapper = this.grid.parentElement;          if (gridWrapper && gridWrapper.classList.contains('tg-df-grid-wrapper')) {             let existingChevron = gridWrapper.querySelector('.tg-df-carousel-scroll-right');             if (this.getViewMode() === 'carousel') {                 if (!existingChevron) {                     gridWrapper.insertAdjacentHTML('beforeend', '\n                 \x3Cbutton class="tg-df-carousel-scroll-right" type="button" aria-label="Scroll right" onclick="this.previousElementSibling.scrollBy({left: 200, behavior: \'smooth\'})">\x3Csvg xmlns="http://www.w3.org/2000/svg" width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">\x3Cpath d="m9 18 6-6-6-6">\x3C/path>\x3C/svg>\x3C/button>');                 }             } else {                 if (existingChevron) {                     existingChevron.remove();                 }             }          }                    const loadMoreBtn = this.grid.querySelector('.tg-df-load-more');          if (loadMoreBtn) {            loadMoreBtn.addEventListener('click', async () => {              if (typeof trackElementInteraction === 'function') {                trackElementInteraction({ id: 'load-more', name: 'Load more', label: 'Load More Results' });              }              if (displayDeals.length <= this.displayLimit) {                 loadMoreBtn.innerHTML = `                  <svg class="tg-df-spinner" style="width: 16px; height: 16px; display: inline-block; vertical-align: middle; margin-right: 8px;" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" d="M12 2v4m0 12v4M4.93 4.93l2.83 2.83m8.48 8.48l2.83 2.83M2 12h4m12 0h4M4.93 19.07l2.83-2.83m8.48-8.48l2.83-2.83"/></svg>                  Loading...                 `;                 loadMoreBtn.disabled = true;                 await this.fetchDeals(this.currentQuery, true);              } else {                 this.displayLimit += ((this.rowsSelect && this.rowsSelect.value) ? parseInt(this.rowsSelect.value, 10) : 12);                 this.render();              }            });          }                      this.bindCouponButtons();            this.checkAndUpdateCoupons();                        // Allow hawklinks.js to discover and rewrite our widget links             // by appending the .article-body class and manually triggering processArticle.            let container = this.root.classList.contains('tg-df-container') ? this.root : this.root.querySelector('.tg-df-container');            if (container && !container.classList.contains('article-body')) {               container.classList.add('article-body');            }            setTimeout(() => {               if (this.grid && !this.grid.classList.contains('article-body')) this.grid.classList.add('article-body');            document.dispatchEvent(new CustomEvent('processArticle', { detail: { element: this.root } }));            }, 50);          } catch(e) {            console.warn("Widget render error", e);          }        }                async checkAndUpdateCoupons() {          const wrappers = Array.from(this.root.querySelectorAll('.tg-df-coupon-wrapper'));          if (wrappers.length === 0) return;                    const merchants = [...new Set(wrappers.map(w => w.getAttribute('data-merchant')).filter(Boolean))];          if (merchants.length === 0) return;          const couponResultsMap = await this.checkMerchantsCouponsBulk(merchants);                    for (const merchant of merchants) {            const hasCoupons = !!couponResultsMap[merchant];            const merchantWrappers = wrappers.filter(w => w.getAttribute('data-merchant') === merchant);            merchantWrappers.forEach(wrapper => {              const spinner = wrapper.querySelector('.tg-df-coupon-spinner');              const btn = wrapper.querySelector('.tg-df-tag-coupons');                            if (spinner) spinner.style.display = 'none';                            if (hasCoupons && btn) {                btn.style.display = 'inline-flex';              } else if (!hasCoupons) {                wrapper.style.display = 'none';              }            });          }        }        updateFloatingCopyBar() {          if (!this.editorBar || !this.editorSelectedCount) return;          if (this.editorMode && this.selectedDeals.size > 0) {            this.editorBar.style.display = 'flex';            this.editorSelectedCount.innerText = this.selectedDeals.size;          } else {            this.editorBar.style.display = 'none';          }        }        async copySelectedDealsToCMS() {           function htmlToSlate(htmlString) {              if (!htmlString) return [{ type: 'paragraph', children: [{ text: '' }] }];              let doc;              if (typeof window !== 'undefined' && window.DOMParser) {                 doc = new DOMParser().parseFromString(htmlString, 'text/html');              } else {                 doc = document.implementation.createHTMLDocument('');                 doc.body.innerHTML = htmlString;              }                            function parseNode(node, marks = {}) {                  if (node.nodeType === 3) {                      const text = node.textContent;                      if (!text) return null;                      return { text: text, ...marks };                  }                  if (node.nodeType === 1) {                      const tagName = node.tagName.toLowerCase();                      if (tagName === 'br') {                          return { type: 'line-break', children: [{ text: '' }] };                      }                      if (tagName === 'p') {                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return { type: 'paragraph', children };                      }                      if (tagName === 'strong' || tagName === 'b') {                          const newMarks = { ...marks, bold: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'em' || tagName === 'i') {                          const newMarks = { ...marks, italic: true };                          return Array.from(node.childNodes).map(child => parseNode(child, newMarks)).flat().filter(Boolean);                      }                      if (tagName === 'a') {                          const href = node.getAttribute('href') || '';                          let children = Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                          if (children.length === 0) children.push({ text: "" });                          return {                              type: 'link',                              url: href,                              isNoFollow: (node.getAttribute('rel') || '').includes('nofollow'),                              isSponsored: (node.getAttribute('rel') || '').includes('sponsored'),                              isOpenNewTab: node.getAttribute('target') === '_blank',                              isPreventDataRewrite: false,                              children: children                          };                      }                      return Array.from(node.childNodes).map(child => parseNode(child, marks)).flat().filter(Boolean);                  }                  return null;              }                            let blocksArray = [];              let currentParagraphChildren = [];              function flushParagraph() {                  if (currentParagraphChildren.length > 0) {                      blocksArray.push({ type: 'paragraph', children: currentParagraphChildren });                      currentParagraphChildren = [];                  }              }              Array.from(doc.body.childNodes).forEach(node => {                  const parsed = parseNode(node, {});                  const parsedItems = Array.isArray(parsed) ? parsed : (parsed ? [parsed] : []);                  parsedItems.forEach(item => {                      if (item.type === 'paragraph') {                          flushParagraph();                          blocksArray.push(item);                      } else {                          currentParagraphChildren.push(item);                      }                  });              });              flushParagraph();              if (blocksArray.length === 0) {                  blocksArray = [{ type: 'paragraph', children: [{ text: '' }] }];              }              return blocksArray;           }           const blocks = [];                      this.editorCopyBtn.innerHTML = '\x3Cspan class="tg-df-coupon-spinner" style="display:inline-block; margin-right:8px; border-top-color:#fff;">' + '<' + '/span> Copying...';           for (const deal of Array.from(this.selectedDeals.values())) {              const url = deal.url;              const merchant = deal.merchant;              const title = deal.title;              const image = deal.image;              const currentPrice = deal.currency + deal.rawPrice;              const wasPrice = deal.hasWasPrice && deal.rawMsrp > deal.rawPrice ? deal.currency + deal.rawMsrp : '';                            let couponsChildren = [];              try {                  const area = this.getAreaCode();                  const apiUrl = new URL('https://search-api.fie.future.net.uk/widget.php');                  apiUrl.searchParams.append('model_name', 'Everything');                  apiUrl.searchParams.append('language', 'en-GB');                  apiUrl.searchParams.append('area', area);                  apiUrl.searchParams.append('combine_product_types', '1');                  apiUrl.searchParams.append('filter_merchant_name', merchant);                  apiUrl.searchParams.append('all_filters', 'false');                  apiUrl.searchParams.append('exclude_unlabelled', 'false');                  apiUrl.searchParams.append('include_specs', 'false');                  apiUrl.searchParams.append('sort', 'voucher');                  apiUrl.searchParams.append('distinct_merchants', 'natural');                  apiUrl.searchParams.append('filter_product_types', 'vouchers,offer_deals,newsletter');                  apiUrl.searchParams.append('rows', '3');                  apiUrl.searchParams.append('origin', 'widgets-clientside');                                    let res; try { res = await fetch(apiUrl.toString()); } catch (e) { return; }                  if (res.ok) {                      const data = await res.json();                      let offers = [];                      if (data && data.widget && data.widget.data && Array.isArray(data.widget.data.offers)) {                        offers = data.widget.data.offers;                      } else if (data && data.data && Array.isArray(data.data.offers)) {                        offers = data.data.offers;                      }                                            if (offers.length > 0) {                          couponsChildren.push({ text: "Also check out these coupons: ", bold: true });                          offers.slice(0, 3).forEach((offer, idx) => {                              const actualOffer = offer.offer || offer;                              const offerName = actualOffer.name || actualOffer.title || offer.model_name || offer.title || offer.name || 'Coupon';                              const linkUrl = actualOffer.link || actualOffer.url || actualOffer.offer_link || '#';                              couponsChildren.push({ type: "line-break", children: [{ text: "" }] });                              couponsChildren.push({ text: "🎟️ " });                              couponsChildren.push({                                  type: "link",                                  url: linkUrl,                                  isNoFollow: true,                                  isSponsored: false,                                  isOpenNewTab: true,                                  isPreventDataRewrite: false,                                  children: [{ text: offerName, bold: true }]                              });                          });                      }                  }              } catch (err) {                  console.warn('Failed to fetch coupons for', merchant, err);              }              let descriptionValue = [];              if (deal.text) {                 descriptionValue = htmlToSlate(deal.text);              } else {                 const dealDescriptions = [                   `Don't miss out on this fantastic deal for the ${title}. It is currently available at ${merchant} for a highly competitive price.`,                   `We've spotted an excellent price drop on the ${title}. Grab it now at ${merchant} before it's gone.`,                   `The ${title} is currently seeing a generous discount over at ${merchant}. This is a perfect time to buy if you've been holding out.`,                   `If you're in the market for the ${title}, ${merchant} has just the deal for you.`,                   `Score the ${title} for less at ${merchant} right now. This is a rare chance to save big.`,                   `Upgrade your setup with the ${title}, now available at a stellar price via ${merchant}.`                 ];                 const randomDescription = dealDescriptions[Math.floor(Math.random() * dealDescriptions.length)];                 descriptionValue = [                    { type: "paragraph", children: [{ text: randomDescription }] }                 ];              }                            if (couponsChildren.length > 0) {                 let lastBlock = descriptionValue[descriptionValue.length - 1];                 if (lastBlock && lastBlock.type === 'paragraph') {                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children.push({ text: "Also check out these coupons: ", bold: true });                     lastBlock.children.push({ type: "line-break", children: [{ text: "" }] });                     lastBlock.children = lastBlock.children.concat(couponsChildren);                 } else {                     descriptionValue.push({                         type: "paragraph",                         children: [                             { type: "line-break", children: [{ text: "" }] },                             { type: "line-break", children: [{ text: "" }] },                             { text: "Also check out these coupons: ", bold: true },                             { type: "line-break", children: [{ text: "" }] },                             ...couponsChildren                         ]                     });                 }              }              function normalizeCurrencyToISO(symbol) {                const map = { '£': 'GBP', '$': 'USD', 'A$': 'AUD', 'CA$': 'CAD', '€': 'EUR' };                return map[symbol] || symbol;              }              const isoCurrency = normalizeCurrencyToISO(deal.currency);              blocks.push({                 id: (window.crypto && window.crypto.randomUUID) ? window.crypto.randomUUID() : 'cms-' + Date.now() + Math.random(),                 blockTypeName: "deal",                 excludeFrom: [],                 collapsible: false,                 props: {                    description: {                       value: descriptionValue,                       touched: false,                       validationMessage: ""                    },                    image: {                       value: {                          credit: [{ type: "paragraph", children: [{ text: merchant }] }],                          dateCreated: Date.now(),                          dateModified: Date.now(),                          distribution: [],                          fileSize: 0,                          height: 1000,                          id: deal.id,                          imageRights: "",                          src: image,                          name: title + ".jpg",                          tags: [],                          width: 1000                       },                       touched: false,                       validationMessage: ""                    },                    showDealButton: { value: true, touched: false, validationMessage: "" },                    isPreferredPartner: { value: false, touched: false, validationMessage: "" },                    linkHref: { value: url, touched: false, validationMessage: "" },                    linkLabel: { value: "", touched: false, validationMessage: "" },                    linkIsNoFollow: { value: true, touched: false, validationMessage: "" },                    linkIsSponsored: { value: false, touched: false, validationMessage: "" },                    linkIsOpenNewWindow: { value: true, touched: false, validationMessage: "" },                    customPromoFlags: { value: [], touched: false, validationMessage: "" },                    showStarDeal: { value: false, touched: false, validationMessage: "" },                    savingType: { value: "none", touched: false, validationMessage: "" },                    starDealPromoFlag: { value: "", touched: false, validationMessage: "" },                    showEditorsChoice: { value: false, touched: false, validationMessage: "" },                    editorsChoiceTitle: { value: "", touched: false, validationMessage: "" },                    hawkPriceCurrency: { value: { value: isoCurrency, label: isoCurrency }, touched: false, validationMessage: "" },                    hawkPrice: { value: deal.hasWasPrice ? String(deal.rawMsrp) : String(deal.rawPrice), touched: false, validationMessage: "" },                    hawkSalePrice: { value: String(deal.rawPrice), touched: false, validationMessage: "" },                    lastCheckedPriceDate: { value: "", touched: false, validationMessage: "" },                    hawkModel: { touched: false, validationMessage: "" },                    productId: { value: "", touched: false, validationMessage: "" },                    voucherId: { value: "", touched: false, validationMessage: "" },                    brand: { value: deal.brand || merchant, touched: false, validationMessage: "" },                    productName: { value: title, touched: false, validationMessage: "" },                    label: { value: "", touched: false, validationMessage: "" },                    retailer: { value: merchant, touched: false, validationMessage: "" },                    priceCheckError: false                 },                 failedFetchError: ""              });           }           const payload = {              type: "articleBuilderPages",              data: blocks           };           const jsonStr = JSON.stringify(payload);                      if (navigator.clipboard && navigator.clipboard.writeText) {              navigator.clipboard.writeText(jsonStr).then(() => {                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              }).catch(err => {                 console.warn('Failed to copy text: ', err);                 alert('Failed to copy deals to clipboard. See console.');              });           } else {              // Fallback              const textArea = document.createElement("textarea");              textArea.value = jsonStr;              document.body.appendChild(textArea);              textArea.focus();              textArea.select();              try {                 document.execCommand('copy');                 this.editorCopyBtn.innerHTML = 'Copied!';                 setTimeout(() => {                    this.editorCopyBtn.innerHTML = '\x3Csvg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="margin-right: 6px;">\x3Crect x="9" y="9" width="13" height="13" rx="2" ry="2"><' + '/rect>\x3Cpath d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"><' + '/path><' + '/svg> Copy to CMS';                 }, 2000);              } catch (err) {                 console.warn('Fallback: Oops, unable to copy', err);                 alert('Fallback: Failed to copy deals to clipboard.');              }              document.body.removeChild(textArea);           }        }      }      // Initialize the Widget      if (document.readyState === 'loading') {        document.addEventListener('DOMContentLoaded', () => new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer }));      } else {        new DealsFinderWidget({ rootId: 'signal-deals-finder-root', rootNode: shadowRoot, hostContainer: hostContainer });      }    })();  </script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Tom's Guide AI Awards 2026: 20 gadgets and tools shaping our future ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/ai/toms-guide-ai-awards-2026</link>
                                                                            <description>
                            <![CDATA[ The Tom’s Guide AI Awards 2026 recognize the standout tools and gadgets that moved beyond the hype to deliver a genuine taste of the future. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">XmzqFRk3ydoCucoEkH57pn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wpZWSEMKLcJxvFB68NHrG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 08 May 2026 11:00:00 +0000</pubDate>                                                                                                                                <updated>Thu, 14 May 2026 15:03:13 +0000</updated>
                                                                                                                                            <category><![CDATA[AI]]></category>
                                                    <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                        <dc:contributor><![CDATA[ Tom&#039;s Guide Staff ]]></dc:contributor>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/wpZWSEMKLcJxvFB68NHrG-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide/Samsung]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A collage of four images showing off AI gadgets with a Tom&#039;s Guide AI Awards 2026 badge in the middle]]></media:description>                                                            <media:text><![CDATA[A collage of four images showing off AI gadgets with a Tom&#039;s Guide AI Awards 2026 badge in the middle]]></media:text>
                                <media:title type="plain"><![CDATA[A collage of four images showing off AI gadgets with a Tom&#039;s Guide AI Awards 2026 badge in the middle]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wpZWSEMKLcJxvFB68NHrG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Let’s hear it for the winners of the Tom’s Guide AI Awards 2026. Although AI is everywhere, these are the tools, appliances and gadgets worth celebrating for being useful, impactful and innovative. </p><p>Over the past few months, we’ve rigorously tested dozens of the latest AI tools and devices to find the ones that go beyond the hype and<em> actually</em> make your life easier. We’ve looked past the trends and "wow factor" to focus on the ones worth the recognition. Whether it’s a smarter home that anticipates your needs or a local solution that supercharges your creativity, these awards represent the best of AI because they are practical, powerful and ready to use right now. </p><p>The winners of the Tom’s Guide AI Awards 2026 are the tools and devices we couldn’t put down, use ourselves and keep coming back to, because they solve real problems. Some help you save time without adding complexity while others offer ingenuity that make them stand out from the rest. All deliver on the promise of AI that feels intuitive and practical. And more importantly, they’re ready to fit into your daily routine right now.</p><h3 class="article-body__section" id="section-personal-tech-phones-pcs-wearables"><span>Personal Tech (Phones, PCs, & Wearables)</span></h3><h2 id="hp-eliteboard-g1a">HP EliteBoard G1a</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:3026px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HQxsjp2mw6EompJ33i4Vud" name="hp-elite-board-g1a-1" alt="The HP EliteBoard G1a in hand with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/HQxsjp2mw6EompJ33i4Vud.jpg" mos="" align="middle" fullscreen="" width="3026" height="1702" 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 HP EliteBoard G1a might look like a common office keyboard, but it’s actually a fully functional PC. This Commodore 64-like computer seems unusual, but this form factor could be ideal for certain users. According to HP, the EliteBoard is for workers who frequently move between workstations and often keep their laptops closed when connected to a monitor.</p><p>Inside, it packs a CPU, storage, RAM, and connectivity. All that’s required on your end is to connect it to a monitor. Before you ask, yes, it includes a mouse and a dongle with an Ethernet port, HDMI, and two USB-C ports. Thanks to Bluetooth support, you can connect additional peripherals.</p><p>While the HP EliteBoard G1a is a remarkably capable computer, it’s admittedly not for everyone. If you own a laptop, you’re probably better off with that. However, if you’re the kind of worker this machine was designed for, it could be very useful. It’s currently listed as “coming soon” on its <a href="https://www.hp.com/us-en/desktops/business/eliteboard.html" target="_blank" rel="nofollow">official product page</a>, but you can pick it up now for <a href="https://www.adorama.com/hp-eliteboard-g1a-ai-mini-pc-16gb-256gb/p/ihd6jg0utaba" target="_blank" rel="nofollow">$1,499 on Adorama</a>. — <em>Tony Polanco</em></p><h2 id="oura-advisor">Oura Advisor</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:2610px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="b3kr3DUtJjyAjN5Fgpvaqn" name="oura-ring-oura-advisor-1" alt="The Oura Ring 4 in hand with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/b3kr3DUtJjyAjN5Fgpvaqn.jpg" mos="" align="middle" fullscreen="" width="2610" height="1468" 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 AI-powered <a href="https://www.tomsguide.com/wellness/fitness/ouras-ai-powered-advisor-is-rolling-out-heres-what-it-means-for-you">Oura Advisor</a> feature — available in the Oura app for the latest <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review">Oura Ring 4</a> and older <a href="https://www.tomsguide.com/reviews/oura-ring-generation-3">Oura Ring 3</a> —  is one of the most actionable and insightful AI wellness coaches we’ve tested. While other wearables provide a laundry list of tracked metrics, the Oura Advisor <em>actually</em> makes sense of all the data, offering digestible trend observations and training tips based on your current goals and recent physical and mental performance.</p><p>Users can set Oura Advisor's voice and how often it checks in. You can also ask it questions anytime using the app. Designed to help you improve your overall well-being in any number of ways, the Advisor can do everything from guiding you to progressively wake up earlier for more productive mornings, to generating detailed training plans for an upcoming marathon/triathlon. Better yet, the more you interact with the Advisor, the better it gets to know you, ultimately leading to even more personalized insights and advice. — <em>Dan Bracaglia</em></p><h2 id="amd-ryzen-ai-max-395">AMD Ryzen AI Max+ 395 </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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="u76xxJ9oVeR9cyW3D5v3i8" name="amd-ryzen-ai-max-1" alt="A motherboard with a AMD Ryzen AI Max chip on it in hand with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/u76xxJ9oVeR9cyW3D5v3i8.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Great silicon for local AI isn’t just about raw horsepower, it’s about doing the job efficiently too — especially when it comes to a laptop chip. And for that reason, the <a href="https://www.tomsguide.com/computing/cpus/two-new-amd-ryzen-ai-max-chips-just-dropped-and-they-could-change-mid-range-gaming-laptops-forever">AMD Ryzen AI Max+ 395</a> manages to nail a pretty effective balance between performance and power efficiency.</p><p>And it all comes down to that monstrous internal GPU 40 cores, and support for up to 128GB of RAM allowing me to easily run gigantic 120 billion parameter models at zippy speeds, or even get agentic on all your daily to-dos with OpenClaw. The strength of local AI is security and versatility to have it do whatever you want it to do, and this is the best portable chip to run it. — <em>Jason England</em></p><h2 id="even-g2-display-smart-glasses-and-r1-smart-ring">Even G2 Display Smart Glasses and R1 Smart Ring</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uszHatDp2RmxPWubtebLBE" name="even-g2-1" alt="A pair of Even Realities G2 smart glasses in a case with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/uszHatDp2RmxPWubtebLBE.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>As someone who’s tested smart glasses for over five years, AI has felt like the missing link to this category — unlocking so many more use cases on something so immediately wearable than the other crop of AI hardware form factors. And out of all of them, the <a href="https://www.tomsguide.com/computing/smart-glasses/even-realities-g2-smart-glasses-review">Even Realities G2</a> finds a great balance of sensible, genuinely user friendly implementations across the board.</p><p>You’ve got your standard array of AI features like a chatbot and live translation (all great for on-the-go), but the biggest ones here come courtesy of <a href="https://www.tomsguide.com/computing/smart-glasses/i-zoned-out-and-stopped-listening-to-my-fiancee-and-the-even-realities-g2-made-sure-she-never-knew">Conversate</a> and <a href="https://www.tomsguide.com/computing/smart-glasses/i-fed-my-tamagotchi-looked-like-a-d1-athlete-and-fact-checked-my-boss-my-time-with-even-g2s-secret-smart-glasses-app-store">Even Hub</a> — basically an app store for smart glasses.</p><p>The former not only listens to and transcripts conversations, but also gives you smart context and follow-up questions to ask (saving me from when my mind drifted away when on the phone with my fiancée), and the second is growing by the day with more and more AI capabilities. — <em>Jason England</em></p><h2 id="napster-view">Napster View</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:3700px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="7kT4sva7ZSaUrtF6hwxn9H" name="napster-view-2" alt="The Napster View on top of a laptop with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/7kT4sva7ZSaUrtF6hwxn9H.jpg" mos="" align="middle" fullscreen="" width="3700" height="2081" 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>Napster View deserves recognition for pushing AI beyond the flat chatbot interface and into a more human, spatial experience. By combining a glasses-free holographic display with AI companions, it reimagines how people interact with AI assistants, which makes collaboration feel more natural and engaging. </p><p>Instead of another app window, Napster View gives AI a physical presence on your desk, helping to manage tasks in a way that feels futuristic yet practical. In a crowded market of lookalike AI tools, Napster View stands out for bold innovation and fresh design highlighting what the next generation of human-AI interaction looks like. — <em>Amanda Caswell</em></p><h2 id="fitnexa-somnipods">Fitnexa SomniPods</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="KNZrJZ5z73zwrDYNaF59aJ" name="fitnexa-somnipods-2" alt="The Fitnexa SomniPods 2 in a case on a table with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/KNZrJZ5z73zwrDYNaF59aJ.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>Good sleep is vital to your wellbeing and longevity so leaving it in the hands of an AI chatbot might be an unnerving prospect. However, the <a href="https://www.tomsguide.com/wellness/sleep-tech/fitnexa-somnipods-3-review">Fitnexa SomniPods 3 Sleep Earbuds</a> impress with an integrated AI helper that uses your sleep tracking data (recorded directly from the earbuds) combined with the best advice sourced from the web to deliver personalized insight into your snooze. Don’t expect sleep doctor level insight, but you will get helpful pointers into taking your eight hours to the next level.</p><p>It helps that as a pair of sleep headphones, the SomniPods 3 rate among the best. The ANC is strong enough to muffle your snoring bed partner and while the sound quality won’t impress audiophiles, it delivers white noise with enough clarity to immerse you in a soothing cocoon. So the SomniPods not only help you sleep better, they can show you just how much good kip you got and give you advice to make the next night even better. — <em>Ruth Jones</em></p><h2 id="rokid-ai-glasses-style">Rokid AI Glasses Style</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="MHZ9nihne2XPvz4wPmPfGN" name="rokid-ai-glasses-1" alt="The Rokid AI Glasses Style on a table with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/MHZ9nihne2XPvz4wPmPfGN.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: Tom's Guide)</span></figcaption></figure><p>Think the Ray-Ban Meta smart glasses, but cheaper, lighter and open to other AI models and that’s what you get with the <a href="https://www.tomsguide.com/computing/smart-glasses/rokid-ai-glasses-style-review">Rokid AI Glasses Style</a>. You can pick from ChatGPT or Gemini to drive the multi-modal capabilities of just asking questions, using image recognition to get answers to problems around you, take notes from meetings, and more.</p><p>And even better, all of this is packed into a sleek pair of shades that nobody will really notice is actually a pair of smart glasses (unless they’re looking really closely at those corners). No display to distract you, just a natural-feeling upgrade to your AI tech arsenal. — <em>Jason England</em></p><h2 id="framework-desktop">Framework Desktop</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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NM5YYdA2Hsh8YGV37JywrS" name="framework-desktop-2" alt="The Framework Desktop on a desk with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/NM5YYdA2Hsh8YGV37JywrS.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/computing/mini-pcs/framework-desktop-review">Framework Desktop</a> completely flipped the idea of what a mini PC is on its head but it also did so for local AI. This DIY and repairable desktop proved that local AI power doesn’t have to come in a locked-down box. By pairing AMD’s AI Max processors with up to 128GB of unified memory, Framework created a mini PC that can run local LLMs just as well as it can handle demanding workloads and even gaming.</p><p>Instead of using a more expensive and power-hungry discrete GPU, the Framework Desktop combines the power of AMD’s Ryzen AI Max chips with unified memory to side-step VRAM limitations. Likewise, it does so in a small, portable case that you can customize to your workflow and even your workspace. It’s hard to find a machine that does it all at this size and price. However, the Framework Desktop delivers and then some with enough versatility that you can edit video and run local AI models during the day and then play games at night. — <em>Anthony Spadafora</em></p><h2 id="msi-stealth-16-ai">MSI Stealth 16 AI+</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fr65MAwH2NknRPwWv5BNzW" name="msi-steal-16-ai-1" alt="The MSI Stealth 16 AI+ (2026) on a table with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/fr65MAwH2NknRPwWv5BNzW.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/computing/gaming-laptops/i-went-hands-on-with-the-redesigned-msi-stealth-16-ai-its-actually-stealthy-now-and-gunning-for-the-macbook-pro">MSI Stealth 16 AI+</a> is not just a great gaming laptop, it’s an AI powerhouse with its monstrous internals — a solid pairing of Intel’s Panther Lake chipset with the next-gen NPU for small local AI tasks, and up to an RTX 5080 for running gigantic models really brings it altogether.</p><p>Throw in Nvidia’s huge toolbox of AI models across agentic capabilities, creativity and more, and you’ve got a really impressive system that can do it all from crunching a massive LLM to creating your next coding masterpiece. And all of this is packed into what I’d call the Windows MacBook Pro aesthetic — an all aluminum shell with great ergonomics, a gorgeous 240Hz OLED panel and plenty of connectivity. — <em>Jason England</em></p><h2 id="samsung-galaxy-s26-ultra">Samsung Galaxy S26 Ultra</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:4952px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="tzphhhAwFZUnDrVag3rcNc" name="galaxy-s26-ultra-2" alt="The Samsung Galaxy S26 Ultra in hand with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/tzphhhAwFZUnDrVag3rcNc.jpg" mos="" align="middle" fullscreen="" width="4952" height="2786" 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>Smartphones are quickly becoming the ultimate AI hardware — embracing the raw power of that built-in silicon to deliver some nifty new features. Sometimes they’re gimmicks, but in the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-ultra-review">Samsung Galaxy S26 Ultra</a>, they definitely are not.</p><p>It starts with fun moments of creativity like AI generative photo edits to move subjects and fill gaps left behind based on the context of everything around it, or Google’s classic circle to search image model. </p><p>But it rapidly gets more ambitious with the likes of Now Nudge giving you contextual multimodal actions based on your messages (setting up a calendar appointment if someone asks if you’re free at 11:30 for brunch), or just full automated app actions giving you full agentic AI across key apps like building a grocery cart in Instacart. — <em>Jason England</em></p><h2 id="dnsys-z1-exoskeleton">Dnsys Z1 Exoskeleton</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:7952px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fSej5QSdQ7rE6LcEFgNXs7" name="dnysys-z1-exoskeleton-2" alt="A person wearing the Dnsys Z1 Exoskeleton with a Tom's Guide Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/fSej5QSdQ7rE6LcEFgNXs7.jpg" mos="" align="middle" fullscreen="" width="7952" height="4473" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dnsys)</span></figcaption></figure><p>Improved mobility can be the difference between going somewhere new or staying home and for those with injuries, disabilities or long-term health conditions, the Dnsys’ exoskeletons are a game changer. This wearable, lower-body exoskeleton makes movements easier by providing strong support and assistance while reducing joint pain.</p><p>While we tested the original<a href="https://www.tomsguide.com/ai/dnsys-x1-exoskeleton-review#viafoura-comments"> X1 Exoskeleton</a> which targets the hips, Dnsys also released a Z1 Exoskeleton that focuses on your knees. Both devices use AI algorithms to predict muscle exertion so that they can provide adaptive assistance in real time. The X1 and Z1 learn your gait and from there, they can predict your movement and send power to your hips or knees right before you move your legs. Dnsys’ algorithms show how AI can often do its best work in the background. — <em>Anthony Spadafora</em></p><h3 class="article-body__section" id="section-smart-home-appliances-security"><span>Smart Home, Appliances & Security</span></h3><h2 id="dyson-spot-scrub-ai">Dyson Spot+Scrub AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PVrwGejTmkhvK5zxgWWipg" name="dyson-spot-scrub-ai-3" alt="The Dyson Spot+Scrub AI cleaning a floor with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/PVrwGejTmkhvK5zxgWWipg.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Dyson is a popular brand known for its incredible power, innovative technology and eye-catching designs. And so it comes as no surprise that its newest robot vacuum and mop should throw AI tech into the mix. The <a href="https://www.tomsguide.com/home/smart-home/dyson-spot-scrub-ai-robot-vacuum-review">Spot + Scrub AI</a> is a wet and dry robot vacuum that combines AI vision and ‘green light illumination’ to detect invisible stains and objects. Its capabilities can quickly identify and  adapt to 190 types of household substances and objects, and navigate around them. </p><p>Other impressive features include an advanced dual-laser LiDAR, HD camera, fluffy optic tech and edge-to-edge cleaning to ensure spotless results. Unlike its predecessor, the Spot +Scrub AI uses a heated cleaning system to keep the roller clean and hygienic and dries it with a 113°F (45°C) hot air cycle to prevent lingering smells. — <em>Cynthia Lawrence</em></p><h2 id="malwarebytes-scam-guard">Malwarebytes Scam Guard</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:2049px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="5HfNYxodzoba3oMQn5xXg5" name="malwarebytes-scam-guard" alt="Malwarebytes Scam Guard running on a laptop with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/5HfNYxodzoba3oMQn5xXg5.jpg" mos="" align="middle" fullscreen="" width="2049" height="1153" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Malwarebytes)</span></figcaption></figure><p>Even when you think you’re up to date on the latest online scams, a new one comes around that’s a whole lot easier to fall for and many people do. That’s why scam protection has become such an essential cybersecurity tool. Malwarebytes’ Scam Guard provides real-time AI-powered protection against all manner of scams.</p><p>Available on both your computer and your phone, Scam Guard can check text messages, links, phone calls, emails and more with just a simple upload. From there, you get real-time answers on whether or not something is a scam with tips to help you avoid falling for similar scams in the future. Scam Guard is also fast and easy to use with a clean interface. The best part though, it doesn’t slow down your devices while keeping you safe. — <em>Anthony Spadafora</em></p><h2 id="switchbot-ai-hub">SwitchBot AI Hub</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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="97NLraexQsyKYC9Kh5FgK" name="switchbot-ai-hub-press.jpg" alt="The SwitchBot AI Hub with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/97NLraexQsyKYC9Kh5FgK.png" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: SwitchBot)</span></figcaption></figure><p>It would be great if your smart home were actually, you know, smart. Switchbot’s AI Hub might actually get us there. This smart home hub has OpenClaw support, which not only allows it to work with the dozens of smart home systems on the market, but lets you communicate with it how you want — be it WhatsApp, iMessage, Discord, or pretty much any other messaging platform.</p><p>The AI Hub can look at connected video streams as well as inputs from other sensors around your home, and analyze what’s going on, predict trends, suggest smart home routines, and more. The Hub supports over 100 SwitchBot devices, offers Matter bridging for up to 30 devices, and integrates with Apple Home, Google Home, and Home Assistant. Best of all, the AI processing is done locally, which means a faster response — and better privacy for you. — <em>Mike Prospero</em></p><h2 id="thermal-camera-p3">Thermal Camera P3</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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="QpwEXrAPJAxhn4XEmHTy9K" name="thermal-master-p3" alt="An iPhone with the Thermal Master P3 thermal camera attached with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/QpwEXrAPJAxhn4XEmHTy9K.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Apple’s iPhones are known for taking exceptional photos, including my own iPhone 17 Pro, but there’s one thing they really can’t do — see in the dark. That’s why I’ve been augmenting my phone’s imaging capabilities with the <a href="https://www.tomsguide.com/phones/i-just-gave-my-iphone-night-vision-with-this-usb-c-thermal-camera-and-now-i-can-see-in-the-dark">Thermal Master P3</a>. The great thing about this accessory is that it shows me, in real-time, the heat signatures of whatever I’m pointing it at, essentially giving me Predator-like vision to see through the darkness.</p><p>It specifically leans on an AI algorithm that helps tweak the thermal signature so that it lines up with the actual image. Other thermal cameras tend to have mushy-looking captures, dominated mostly by the colors of different temperatures. However, the AI analyzes the data from the thermal camera and aligns it with my iPhone’s camera, resulting in a sharp image where finer details are exposed. — <em>John Velasco</em></p><h2 id="simplisafe">SimpliSafe</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eHvBJbjTph7XFgkegoGBib" name="Simplisafe-1" alt="A SimpliSafe camera in hand with a Tom's Guide Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/eHvBJbjTph7XFgkegoGBib.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Many of the best security cameras have AI to help you better determine what’s lurking inside or outside your house — is it an animal, a person, a vehicle, and what are they doing there? But SimpliSafe is combining that AI with its professional monitoring service, so they can more easily and quickly diagnose if there’s an actual threat. </p><p>Once SimpliSafe’s outdoor camera detects motion, its AI analyzes the video and, if it determines that it’s a threat, can alert an agent within 30 seconds, so that they can either warn the intruder via the camera’s built-in speakers or alert the police. And, the AI can identify familiar faces, so your teen won’t get arrested if they’re caught sneaking back home after curfew — but they’ll still be in trouble! — <em>Mike Prospero</em></p><h2 id="eight-sleep-the-pod-5-ultra">Eight Sleep The Pod 5 Ultra</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="bjBQHeaxe8cwNxssD8PYyY" name="eight-sleep-pod-5-ultra" alt="The Eight Sleep Pod 5 Ultra with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/bjBQHeaxe8cwNxssD8PYyY.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: Eight Sleep)</span></figcaption></figure><p>Since we spend a third of our lives sleeping, why not do so smarter? Well, that’s exactly what Eight Sleep has done with its new <a href="https://www.tomsguide.com/wellness/sleep-tech/eight-sleep-pod-4-vs-pod-5-ultra-which-smart-mattress-cover-should-you-buy">Pod 5 Ultra</a> AI-powered mattress cover and blanket system. With help from its Autopilot system, the Pod 5 can make automated changes to your sleep temperature, bed elevation and more in the background so you get the best rest possible.</p><p>Surprisingly, the Pod 5 is also able to predict illness using its AI sensors which recognize and report on any anomalies in your heart rate and respiration. Its AI can even detect snoring and automatically elevate your bed to improve breathing. Likewise, if you’re having trouble falling asleep, Eight Sleep’s personalized AI coach can analyze your sleep data and provide tailored advice to rectify any problems. The Pod 5 is another great example of AI working in the background to help improve your life. — <em>Anthony Spadafora</em></p><h2 id="govee-lightwall">Govee Lightwall</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:6000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="8pddvMrJeHjcCpiF3fkLQi" name="govee-lightwall-1" alt="The Govee Lightwall with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/8pddvMrJeHjcCpiF3fkLQi.jpg" mos="" align="middle" fullscreen="" width="6000" height="3376" 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>Govee’s new <a href="https://www.tomsguide.com/home/smart-home/govee-lightwall-review">Lightwall</a> isn’t the company’s first product to feature its conversational AI Lighting Bot but it does give you the largest canvas yet to work with. Right from within the Lightwall’s settings in the app, tapping “AI” brings up a chatbot that can make highly detailed lighting effects, pictures and even animated GIFs with just a short prompt.</p><p>With a 7.9 x 5.3 foot display, Govee’s Lightwall lets you bring any idea you can think of to life in 60 to 90 seconds. The Govee app already features hundreds of preset scenes but with its Lighting Bot 2.0, you can fill in the gaps and create bespoke scenes based on the occasion or even your mood. Govee’s chatbot isn’t just for its new Lightwall though and you can use it to customize smart bulbs, permanent outdoor lights or even Christmas lights. It’s intuitive AI you’ll actually use even if you don’t know the difference between ChatGPT and Google Gemini. —<em> Anthony Spadafora</em></p><h2 id="lg-alpha-11-processor">LG Alpha 11 Processor </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="BY47cZyC8LJZEVe7Gq8uKn" name="lg-c6-2" alt="The LG G6 OLED on a stand with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/BY47cZyC8LJZEVe7Gq8uKn.jpg" mos="" align="middle" fullscreen="" width="2000" height="1123" 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>At the heart of LG’s latest OLED TV lineup is the latest version of the Alpha 11 Processor. While LG has hyped many of the AI-based software features that this chipset powers (like chatbots and content-recommendation tools), its biggest contribution to LG’s <a href="https://www.tomsguide.com/tvs/oled-tvs/best-oled-tvs">best OLED TVs</a> is the way in which it elevates the picture.</p><p>Ahead of the release of the <a href="https://www.tomsguide.com/tvs/oled-tvs/lg-c6-oled-review">LG C6</a> and G6 OLED TVs, we were given a demonstration of the third-generation Alpha 11 Processor in action at LG headquarters. In front of a row of four OLED TVs (the <a href="https://www.tomsguide.com/tvs/4k-tvs/samsung-s95f-oled-tv-review">Samsung S95F</a>, the <a href="https://www.tomsguide.com/tvs/oled-tvs/sony-bravia-8-ii-review">Sony Bravia 8 II</a>, the LG G6 and <a href="https://www.tomsguide.com/tvs/oled-tvs/lg-g5-oled-tv-review">G5 OLED</a>), an LG representative showcased how the newest picture processing algorithms work to improve a common issue on these TVs: color banding (otherwise known as posterization).</p><p>This pesky visual problem occurs across color gradients, rendering what should be seamless transitions into chunky, harshly separated bands of light. During the demo, a visually punishing sequence from “The Green Knight” — in which a person swims underwater in a vast, crimson-colored sea — was simultaneously shown across all of the flagship OLED TVs. On all but one of these sets (including the LG G5), the red-colored light illuminating the sea appeared unnaturally striped to varying degrees. Only the G6 was able to render this sequence without color banding.</p><p>This year, the third-generation Alpha 11 AI Processor power can be found in both the G6 and C6 OLED TVs, and while the ultimate success of these TVs depends on factors beyond just their processing power, this handy piece of hardware is already leaving its mark on some of the year’s <a href="https://www.tomsguide.com/us/best-tvs,review-2224.html">best TVs</a>. — <em>Michael Desjardin</em></p><h2 id="mova-lidax-ultra-awd-series">MOVA LiDAX Ultra AWD Series</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:1282px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="GU2dxjRFiS5dCTEfkTDD8F" name="MOVA-lidax-ultra-series-press-shot" alt="The Mova Lidax Ultra robot vacuum cutting grass with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/GU2dxjRFiS5dCTEfkTDD8F.jpg" mos="" align="middle" fullscreen="" width="1282" height="721" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Mova)</span></figcaption></figure><p>Robot lawnmowers are getting smarter and smarter. MOVA’s new <a href="https://www.tomsguide.com/home/lawn-care/best-robot-lawnmowers-of-ces">LiDAX Ultra AWD Series </a>can not only keep your grass trimmed, but using a combination of 360° 3D LiDAR and an AI-enhanced 1080p HDR camera, can avoid all of your kids’ toys in the process — it can identify more than 300 different objects. </p><p>One of the neatest features of MOVA’s lawnmower is that, in addition to cutting straight patterns like diamonds or parallel lines, it can also cut shapes in your lawn — like hearts, stars, and moons. We can only imagine that the company will add more shapes as time goes on. And, when it’s not mowing your lawn, the MOVA can even act as a security guard, patrolling your yard and letting you view a live feed from its camera. Can your push mower do that? — <em>Mike Prospero</em></p><h2 id="samsung-bespoke-ai-4-door-family-hub">Samsung Bespoke AI 4-Door Family Hub</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:1232px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ccaTcc5icGqdnWtpgWGESe" name="Samsung-Bespoke-AI-3-Door-Refrigerator-AutoView-scaled" alt="The Samsung Bespoke AI 4 Door Refrigerator with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/ccaTcc5icGqdnWtpgWGESe.jpg" mos="" align="middle" fullscreen="" width="1232" height="693" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Samsung)</span></figcaption></figure><p>What’s for dinner? That perennial question could be a thing of the past, thanks to the food recognition inside Samsung’s premium <a href="https://www.tomsguide.com/home/i-didnt-expect-to-like-samsungs-new-ai-fridge-that-can-suggest-recipes-tell-you-the-weather-and-stream-your-favorite-playlists-but-now-im-obsessed">Bespoke AI 4-Door Family Hub</a> fridge, which has just been given a real boost thanks to the addition of Google’s AI. Now, it uses a combination of Samsung’s own AI and Gemini to better identify everything you put in or take out. It can tag everything from avocados to zucchini, and even knows the difference between regular and diet Coke.</p><p>The fridge goes a step further, suggesting meals based on what you have on hand, adding things to grocery lists that you use often, and even letting you know if that milk in the back is starting to go bad. You might never let food go to waste again. — <em>Mike Prospero</em></p><h2 id="lg-signature-iconic-oven-with-gourmet-ai">LG SIGNATURE Iconic Oven with Gourmet AI</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="WdTAja9qcrgKmi4EXeBsPi" name="lg-signature-iconic-oven-press-shot" alt="The LG Signature Iconic Oven in a kitchen with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/WdTAja9qcrgKmi4EXeBsPi.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: LG)</span></figcaption></figure><p>Never overcook anything again! <a href="https://www.tomsguide.com/home/kitchen-dining/lg-signature-just-announced-a-smart-oven-with-an-in-built-camera-and-its-ideal-for-bakers">LG’s Signature Iconic Oven</a> has a camera on the inside that, when combined with its Gourmet AI, can identify more than 85 dishes </p><p>Gourmet AI, powered by an intelligent AI camera inside the oven cavity that identifies more than 85 distinct dishes and automatically selects the ideal cooking settings to deliver flawless results — removing the complexity from gourmet cooking and placing perfection within effortless reach. Complementing this is the AI Browning feature, which monitors baked goods as they cook and sends a personalized notification through the ThinQ™ app the moment they reach a user's preset level of golden perfection. — <em>Mike Prospero</em></p><h2 id="aqara-fp400">Aqara FP400</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:3000px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="nowwBQEvwaHHVvxR3UHsw3" name="Aqara-fp400-press-shot" alt="The Aqara FP400 sensor on a wall with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/nowwBQEvwaHHVvxR3UHsw3.png" mos="" align="middle" fullscreen="" width="3000" height="1688" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Aqara)</span></figcaption></figure><p>“Help, I’ve fallen and I can’t get up!” Remember those commercials? If you’re caring for an elderly person and want to make sure they’re safe — without the intrusiveness of a security camera — the Aqara FP400 could be it. This wall- or ceiling-mounted device uses mmWave technology to sense the presence of up to 10 people in a room, but that’s just the start. </p><p>Using AI, it can detect if each person is walking, sitting, or lying down, and where they are in the room — and if they fell. From there, this Matter-enabled device can trigger all sorts of routines, be it turning on the lights, adjusting the thermostat, unlocking the door, or calling for help. </p><p>Its uses go beyond the elderly, too. Imagine if you could just sit down on your couch in the evening, and the FP400 could automatically dim the lights, close the blinds, and turn your TV on to your favorite streaming service — and then automatically pause the movie if you have to run to the bathroom. Now that’s a practical use for AI if we ever saw one. — <em>Mike Prospero</em></p><h3 class="article-body__section" id="section-specialty-future-tech"><span>Specialty & Future Tech</span></h3><h2 id="xreal-real3d">Xreal Real3D </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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="D85y8oiwyZFGoAR5S9Kzv8" name="xreal-real3d-2" alt="The Xreal One Pro AR glasses worn by a person with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/D85y8oiwyZFGoAR5S9Kzv8.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Xreal’s <a href="https://www.tomsguide.com/computing/smart-glasses/xreal-one-pros-huge-3d-update-just-landed-and-the-usd170-discount-couldnt-be-better-timed">Real3D</a> mode debuted alongside the release of its <a href="https://www.tomsguide.com/computing/smart-glasses/xreal-1s-review">Xreal 1S</a> AR glasses. However, the company then brought this same functionality to the <a href="https://www.tomsguide.com/computing/vr-ar/xreal-one-ar-glasses-review">Xreal One</a> and <a href="https://www.tomsguide.com/computing/vr-ar/smart-glasses/xreal-one-pro-ar-glasses-review">Xreal One Pro</a> AR glasses via a firmware update. What sets Xreal’s implementation of real-time 2D to 3D content conversion apart is that it’s done entirely on the glasses themselves.</p><p>The X1 chip inside Xreal’s AR glasses does all the work which helps lower latency across the board. More importantly though, since this conversion is being done on device, you don’t have to worry about DRM getting in the way of watching your favorite shows and movies in 3D. Gaining access to this new dimension via a software update adds even more immersion and makes Xreal’s AR glasses an ideal choice for both productivity and entertainment. — <em>Anthony Spadafora</em></p><h2 id="norton-neo">Norton Neo</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="idTd8NCj2rHqcG2DzttERC" name="norton-neo" alt="The Norton Neo browser on a laptop with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/idTd8NCj2rHqcG2DzttERC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Norton is best known for its antivirus software but <a href="https://www.tomsguide.com/computing/browsers/i-tried-nortons-ai-powered-neo-browser-and-it-finally-made-sense-out-of-my-dozens-of-open-tabs">Neo</a> is a fresh new take on a web browser. It’s built on Chromium so all of your favorite extensions and integrations still work as you’d expect but with useful AI features throughout. When you boot up Neo for the first time, you’re greeted with its calmer and clutter-free Magic Page. Then, instead of your standard address bar, its central command bar Magic Box combines that functionality with an AI chatbot interface. No more typing out URLs, you just tell Neo where you want to go or what you want to find and it intelligently handles the rest.</p><p>Norton Neo also includes a bunch of other useful features for a better browsing experience. From auto-organized horizontal and vertical tabs to its Link Peek feature which lets you preview sites in a lightweight overlay, Neo makes web browsing feel much more intentional. Then when you need some extra help, Norton’s Neo chatbot is just a click away and shows up in a sidebar on the right so you don’t have to navigate away from the page you’re on. Norton might be a household name for security but Neo is proof the company isn’t resting on its laurels. — <em>Anthony Spadafora</em></p><h2 id="mixbook">Mixbook</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="YFzafcFXL4YfwCMg6EwKeF" name="Mixbook-3" alt="A photobook made with Mixbook with a Tom's Guide AI Awards 2026 badge" src="https://cdn.mos.cms.futurecdn.net/YFzafcFXL4YfwCMg6EwKeF.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>The hardest part when creating a photo book is getting started. We have so many photos on our phones and in online photo albums, it’s difficult to know where to begin. That’s where <a href="https://www.tomsguide.com/cameras-photography/mixbook-photo-book-review">Mixbook Studio</a> comes in. A new feature from the company that makes some of the best photo books, MixBook Studio uses AI to help you organize your photos into a compelling narrative, generate captions from the photos, pick the best layouts and themes for your photo book, and even touch up photos that would otherwise be too low-resolution to print.</p><p>Mixbook Studio also lets you collaborate with others on your projects which helps ensure everyone’s contributions don’t get overwritten and that the overall feel of the book remains consistent. Most importantly, its AI is aimed at aiding your creativity, not replacing it. — <em>Mike Prospero</em></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 20 years ago the Nintendo Wii changed everything — 9 wonderfully weird gadgets from the 2000s that put today’s AI slop to shame ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/i-miss-when-gadgets-were-weird-9-icons-from-20-years-ago-that-put-todays-ai-to-shame</link>
                                                                            <description>
                            <![CDATA[ From the Nintendo Wii to the Flip Video camcorder, a look back 20 years into the past reveals a tech industry that was willing to take much bigger risks with hardware and innovate instead of iterate. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">xtMGNT9ZmvbAdJN4ZMSTD6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MMwaPQyHQhzs5zTHT3zf7S-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 07 May 2026 04:01:00 +0000</pubDate>                                                                                                                                <updated>Thu, 07 May 2026 11:05:38 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/MMwaPQyHQhzs5zTHT3zf7S-1280-80.jpg">
                                                            <media:credit><![CDATA[Motorola/Nokia/Nintendo/Pure Digital/BlackBerry]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Motorola O Rokr, Nokia N95, Nintendo Wii, Pure Digital Flip Video and BlackBerry Pearl 8100]]></media:description>                                                            <media:text><![CDATA[Motorola O Rokr, Nokia N95, Nintendo Wii, Pure Digital Flip Video and BlackBerry Pearl 8100]]></media:text>
                                <media:title type="plain"><![CDATA[Motorola O Rokr, Nokia N95, Nintendo Wii, Pure Digital Flip Video and BlackBerry Pearl 8100]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MMwaPQyHQhzs5zTHT3zf7S-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Since I cover tech for a living I get asked the same questions by friends and family every time we get together. Like “What’s new and cool right now,” or “What’s the next big thing?"</p><p>My answers have gotten less and less exciting over time. In the last 20 years, we’ve traded fun and sometimes wonderfully weird hardware innovation for iteration. Yes, smart phones are getting thinner and their cameras are getting better. But today, AI features are a much bigger deal now than hardware.</p><p>Think about gadgets 20 years ago and how interesting and different they were compared to what we’re getting today. In 2006-27, Nintendo re-invented the game console, Pure Digital made capturing and uploading video super cheap and Apple introduced the first MacBook Pro.</p><p>Here are 9 top gadgets from 2006 that make me more than a little nostalgic.</p><h2 id="nintendo-wii-2006">Nintendo Wii (2006)</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:2078px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="8cCxfSjs6Dgi2MScidEAMJ" name="GettyImages-94664345-2" alt="Nintendo Wii" src="https://cdn.mos.cms.futurecdn.net/8cCxfSjs6Dgi2MScidEAMJ.jpg" mos="" align="middle" fullscreen="" width="2078" height="1169" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Robert Gilhooly/Bloomberg/Getty)</span></figcaption></figure><p>If you were old enough to pick up a controller in 2006, you are likely old enough to remember playing Wii Sports, especially bowling. Nintendo’s <strong>motion-sensing controllers</strong> revolutionized how we played video games, and the Nintendo Wii ($249) got millions of people off the couch and moving. It also did an amazing job of bringing families together and was also just a great party game console. <strong>Despite some broken TVs</strong> — how many of you forgot to attach the strap to your wrist — overall the Wii was about as fun as gaming gets.</p><h2 id="flip-video-2007">Flip Video (2007)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XuvmPoBdv4tsBAHW5TpdFJ" name="Pure Digital Flip Video" alt="Pure Digital Flip Video" src="https://cdn.mos.cms.futurecdn.net/XuvmPoBdv4tsBAHW5TpdFJ.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: Pure Digital)</span></figcaption></figure><p>I was lucky enough to test the Flip Video ($130) from Pure Digital back in the day, and it was a huge deal because it allowed users to simply <strong>flip-out the USB arm</strong> and plug it into a computer. Video recording phones were not quite the rage yet, and this design made it delightfully simple to upload and share your footage. Yes, the 720p resolution was low-res and you didn’t get expandable SD storage, but I had a blast capturing family memories on this thing.</p><h2 id="nokia-n95-2006">Nokia N95 (2006)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="SHUA9jucbvPUpTEh4iZBGJ" name="Nokia N95" alt="Nokia N95" src="https://cdn.mos.cms.futurecdn.net/SHUA9jucbvPUpTEh4iZBGJ.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: Nokia)</span></figcaption></figure><p>I didn’t know it at the time, but the Nokia World event I attended in Amsterdam in 2006 was the beginning of the end for a brand that reached as high as <strong>40% market share</strong> for mobile phones. Of course, the iPhone would come along and change everything in 2007. But before that, Nokia announced the Nokia N95, which it called a <strong>“multimedia computer.”</strong> The N95 was the most feature-packed mobile to date with a <strong>5MP Carl Zeiss camera</strong>, built-in GPS and an iconic dual-slide mechanism. Sliding the screen up revealed the keypad, and sliding it down revealed media playback controls.</p><h2 id="slingbox-2005">Slingbox (2005)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mg6noW4BBK78ZazFNCUcAJ" name="Slingbox" alt="Slingbox" src="https://cdn.mos.cms.futurecdn.net/mg6noW4BBK78ZazFNCUcAJ.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: Slingbox)</span></figcaption></figure><p>Before there was YouTube TV, this was the best game in town. The original Slingbox was introduced in 2005, but sales started to take off in 2006. The premise was simple. <strong>Connect this device to your cable box</strong>, and you’d be able to watch your favorite shows, movies and sports away from home on your laptop. The original model supported only one-to-one connections but the Slingbox Pro could handle up to four different sources. </p><h2 id="blackberry-pearl-2006">BlackBerry Pearl (2006)</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:1083px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="BL7nF6zMXcbdVGmoRdmU6J" name="GettyImages-165223652-David Cooper-2" alt="BlackBerry Pearl 8100" src="https://cdn.mos.cms.futurecdn.net/BL7nF6zMXcbdVGmoRdmU6J.jpg" mos="" align="middle" fullscreen="" width="1083" height="609" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: David Cooper/Getty)</span></figcaption></figure><p>Remember when phones were weird? The BlackBerry Pearl attempted to take the mobile email machine from the business world to the masses. And the experiment worked with a much slimmer design than previous BlackBerries, an <strong>innovative trackball for navigation</strong> and a built-in camera (a first for the lineup). The <strong>SureType keyboard was controversial</strong> because it stuffed two letters on a single key, but overall it was a hit.</p><h2 id="kodak-easyshare-v570-2006">Kodak EasyShare V570 (2006)</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:2100px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="fgzuRNLsPgVzqUxemC7ynd" name="GettyImages-94825502-2" alt="Kodak EasyShare V570" src="https://cdn.mos.cms.futurecdn.net/fgzuRNLsPgVzqUxemC7ynd.jpg" mos="" align="middle" fullscreen="" width="2100" height="1181" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Neal Ulevich/Bloomberg/Getty)</span></figcaption></figure><p>Today we take multiple-camera setups on our phones for granted, but the Kodak EasyShare V570 was a groundbreaking point-and-shoot in 2006 because it offered a dual-lens system. You got both a <strong>23mm ultra-wide lens</strong> and a <strong>29-117mm optical zoom lens</strong> in a single design. The lenses also used <strong>folded optics</strong> so they didn’t extend outside the camera, which is pretty remarkable for a 5x optical zoom camera. No wonder this camera won a gold medal at the 2006 Industrial Design Excellence Awards.</p><h2 id="apple-macbook-pro-2006">Apple MacBook Pro (2006)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bbYNEgJFWzqKiFGnfB25kT" name="Apple MacBook Pro 2006" alt="Apple MacBook Pro (2006)" src="https://cdn.mos.cms.futurecdn.net/bbYNEgJFWzqKiFGnfB25kT.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: Apple/Tom's Guide)</span></figcaption></figure><p>When Apple launched the first MacBook Pro back in 2006, it was chock-full of firsts. This was the first MacBook to use an Intel processor, ditching the previous PowerPC G4. It also introduced a <strong>MagSafe power connector</strong>, a magnetic charging port that disconnected safely if someone tripped over the cord. And you got a built-in <strong>iSight camera </strong>for the first time. The inch-thick notebook was bulky by today’s standards, but this 15.4-inch aluminum widescreen beauty paved the way for modern laptops.</p><h2 id="garmin-nuvi-660-2006">Garmin nuvi 660 (2006)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dYb9r3UVzrv6f5HCiTekHJ" name="Garmin Nuvi 660" alt="Garmin nuvi 660" src="https://cdn.mos.cms.futurecdn.net/dYb9r3UVzrv6f5HCiTekHJ.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: Garmin)</span></figcaption></figure><p>Before GPS navigation became a standard feature in phones with Google Maps — the Motorola Droid in 2009 paved that road — the Garmin uni 660 was the pinnacle of standalone GPS units. It featured a <strong>4.3-inch sunlight readable touchscreen</strong> (a big leap from 3.5 inches on other units), Bluetooth for making and receiving calls and a built-in FM receiver for <strong>live traffic alerts</strong>. It even came with an FM transmitter so you could beam audio to your car’s radio.</p><h2 id="motorola-o-rokr-2006">Motorola O Rokr (2006)</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="skE6jWAncdCcg4KnAwgYEJ" name="Motorola O Rokr" alt="Motorola O Rokr" src="https://cdn.mos.cms.futurecdn.net/skE6jWAncdCcg4KnAwgYEJ.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: Motorola)</span></figcaption></figure><p>Yes, it’s dorky looking by today’s standards, but the Motorola O Rokr was <strong>one of the first pieces of wearable tech</strong> and a precursor to today’s <a href="https://www.tomsguide.com/computing/vr-ar/best-smart-glasses">smart glasses</a>. A collaboration with Oakley, the O Rokr glasses delivered <strong>stereo music to your ears</strong> via Bluetooth with two small speakers attached to the arms of the glasses. And the frames featured physical buttons to play/pause music and skip tracks, as well as answer calls. You only got 5 hours of talk time and the $249 price was very pricey for 2006 money, but this was a very cool ahead-of-its-time gadget.</p><p><strong>Your turn: </strong>Now tell us which gadgets impressed you most in this list and which ones you miss the most overall. </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/computing/the-50-moments-that-defined-apple">Apple at 50: The 51 best (and worst) moments in Apple's history</a></li><li><a href="https://www.tomsguide.com/sales-events/retro-gaming-is-back-relive-the-classics-with-these-9-retro-consoles-and-games">Retro gaming is back — relive the classics with these 9 retro consoles and games</a></li><li><a href="https://www.tomsguide.com/audio/i-ditched-my-smartphone-to-listen-to-music-on-my-decade-old-ipod-here-are-3-things-i-liked-and-2-i-didnt">I ditched my smartphone to listen to music on my decade-old iPod — 3 things I liked and 2 I didn't</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've spent two years testing 300 cameras, earbuds, drones, keyboards and more — here are my favorites from each category ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/ive-spent-two-years-testing-300-cameras-earbuds-drones-keyboards-and-more-here-are-my-favorites-from-each-category</link>
                                                                            <description>
                            <![CDATA[ As a reviews writer, I've tested many tech products, including but not limited to cameras, keyboards, boots, and more. Here are the ones I've loved the most. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">B5RvXqvGT7MZc3MhJooC5U</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/jNV52VRvj6EDu8JSZ5KdFU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 15 Apr 2026 13:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ nikita.achanta@futurenet.com (Nikita Achanta) ]]></author>                    <dc:creator><![CDATA[ Nikita Achanta ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oXuvixDz99SbZp9z8Uoor3.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nikita is a Senior Writer on the Reviews team at Tom&#039;s Guide. She is a lifelong gaming and photography enthusiast, especially interested in wildlife photography. Having worked as a Sub Editor and Writer for Canon EMEA, she’s a bit of a grammar nerd (and a supporter of the Oxford comma), and has also interviewed photographers from all over the world and working in different genres. A holder of two master’s degrees, the most recent one being in Magazine Journalism from Cardiff University, Nikita’s work has appeared in several publications such as Motor Sport Magazine, NME, Marriott Bonvoy, The Independent, and Metro. Her favorite tech includes the PS5, the DJI Air 3S, and the Fujifilm X-T50. She&#039;s also a licensed drone pilot and cameras expert so you&#039;ll find her testing those nearly every week.&lt;/p&gt;&lt;p&gt;In her downtime, Nikita can usually be found sinking hours into RPGs on her PS5, flying a drone, out on a walk with a camera in hand, at a concert, watching F1, or planning her next tattoo. You can follow her photography account on Instagram&lt;a href=&quot;https://www.instagram.com/photos.bynikita/&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt; here&lt;/a&gt;.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/jNV52VRvj6EDu8JSZ5KdFU-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Keen Zionic NXT Mid Waterproof boots and a Fujifilm X-T50 mirrorless camera]]></media:description>                                                            <media:text><![CDATA[Keen Zionic NXT Mid Waterproof boots and a Fujifilm X-T50 mirrorless camera]]></media:text>
                                <media:title type="plain"><![CDATA[Keen Zionic NXT Mid Waterproof boots and a Fujifilm X-T50 mirrorless camera]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/jNV52VRvj6EDu8JSZ5KdFU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Last week marked my second anniversary as a reviews writer at Tom's Guide. For the last two years, I've had my fingers in many pies and I've juggled many plates, and I've reviewed nearly every type of product. From <a href="https://www.tomsguide.com/best-picks/best-mechanical-keyboards">mechanical keyboards</a> and <a href="">mirrorless cameras</a> to <a href="https://www.tomsguide.com/us/best-drones,review-2412.html">drones</a> and <a href="https://www.tomsguide.com/best-picks/best-hiking-boots">hiking boots</a>, I've covered everything. It's made me more knowledgable and, along the way, I hope I've succeeded in sharing that knowledge with you, and have helped you make better buying decisions.</p><p>I've wanted to be a journalist and a writer for as long as I can remember, and I'm very privileged that I get to share my writing with you, dear reader, almost every single day. You'd be as surprised as I was when I counted the total number of products I've reviewed so far: it's just under 300. That's crazy to me, so I thought I'd share my favorite products from each category with you today.</p><p>I'll cover my favorite from each category, not my top-rated. Even though some products on this list may not have necessarily received 4.5 or 5 stars from me, I keep coming back to them. The last two years have been nothing short of awesome, and I can't wait to see what other products I get my hands on this year and the next and the next!</p><h2 class="article-body__section" id="section-my-favorite-camera"><span>My favorite camera</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="Cybky3Qgs9L49dvpLdgaGH" name="Fujifilm_XT50_14.JPG" alt="A Fujifilm X-T50 camera in the charcoal grey colorway" src="https://cdn.mos.cms.futurecdn.net/Cybky3Qgs9L49dvpLdgaGH.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>I've reviewed many of the <a href="https://www.tomsguide.com/us/best-cameras,review-2196.html">best cameras</a> and <a href="https://www.tomsguide.com/us/best-mirrorless-cameras,review-2221.html#section-the-best-mirrorless-camera-for-wildlife-photography">mirrorless cameras</a> as photography is my passion and one of my favorite hobbies. Even though I've tested expensive Leicas and 100MP medium format beasts, my favorite camera is the <a href="https://www.tomsguide.com/cameras-photography/fujifilm-x-t50-review">Fujifilm X-T50</a>. It's the first camera I ever tested at Tom's Guide and I loved it so much that I bought it with my own money — and <a href="https://www.tomsguide.com/cameras-photography/mirrorless-cameras/i-didnt-realize-how-much-i-loved-the-fujifilm-x-t50-until-i-photographed-my-trip-to-iceland-and-it-blew-me-away">even took it to Iceland with me</a>.</p><div class="product"><a data-dimension112="e073ef7e-d8f2-4799-a13e-456c3467e7b1" data-action="Deal Block" data-label="The Fujifilm X-T50 succeeds and improves on the X-T30 II, and it packs a punch with a huge 40.2MP sensor, excellent in-body image stabilization and reliable autofocus. It's also the first Fuji camera to sport a dedicated film simulation dial on its body for maximum (and easy-to-reach) creativity." data-dimension48="The Fujifilm X-T50 succeeds and improves on the X-T30 II, and it packs a punch with a huge 40.2MP sensor, excellent in-body image stabilization and reliable autofocus. It's also the first Fuji camera to sport a dedicated film simulation dial on its body for maximum (and easy-to-reach) creativity." data-dimension25="$1399" href="https://www.amazon.com/Fujifilm-Mirrorless-Digital-Camera-XF16-50mmF2-8-4-8/dp/B0D3X8LLNT/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:78.01%;"><img id="HbwuHEixisNVZfUN754aZi" name="X-T50 deal body" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HbwuHEixisNVZfUN754aZi.png" mos="" align="middle" fullscreen="" width="1264" height="986" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fujifilm X-T50 succeeds and improves on the X-T30 II, and it packs a punch with a huge 40.2MP sensor, excellent in-body image stabilization and reliable autofocus. It's also the first Fuji camera to sport a dedicated film simulation dial on its body for maximum (and easy-to-reach) creativity.<a class="view-deal button" href="https://www.amazon.com/Fujifilm-Mirrorless-Digital-Camera-XF16-50mmF2-8-4-8/dp/B0D3X8LLNT/" target="_blank" rel="nofollow" data-dimension112="e073ef7e-d8f2-4799-a13e-456c3467e7b1" data-action="Deal Block" data-label="The Fujifilm X-T50 succeeds and improves on the X-T30 II, and it packs a punch with a huge 40.2MP sensor, excellent in-body image stabilization and reliable autofocus. It's also the first Fuji camera to sport a dedicated film simulation dial on its body for maximum (and easy-to-reach) creativity." data-dimension48="The Fujifilm X-T50 succeeds and improves on the X-T30 II, and it packs a punch with a huge 40.2MP sensor, excellent in-body image stabilization and reliable autofocus. It's also the first Fuji camera to sport a dedicated film simulation dial on its body for maximum (and easy-to-reach) creativity." data-dimension25="$1399">View Deal</a></p></div><p>The X-T50 packs everything I need in a compact, travel-friendly camera. Its 40.2MP sensor captures stunning photos with vivid colors and plenty of detail. I love the film simulation dial which lets me quickly swap between my favorite recipes, and the camera's straightforward control scheme makes it extremely easy to use. Featuring outstanding 7-stops of IBIS and boasting the ability to record 6.2K/30fps video, it's the best camera I've used — and it looks stunning too.</p><h2 class="article-body__section" id="section-my-favorite-drone"><span>My favorite drone</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="R6yAZa8SKMfTqh5i4sqAhN" name="DJI_mavic_4_Pro_ 2.JPG" alt="A dark grey DJI Mavic 4 Pro drone" src="https://cdn.mos.cms.futurecdn.net/R6yAZa8SKMfTqh5i4sqAhN.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>I've reviewed every quadcopter that appears on our <a href="https://www.tomsguide.com/us/best-drones,review-2412.html">best drones </a>buying guide, and these nifty aerial photography devices are some of my favorite products to test. After having spent many, many hours flying drones, my top pick has got to be the <a href="https://www.tomsguide.com/cameras-photography/drones/dji-mavic-4-pro-review">DJI Mavic 4 Pro</a> which is basically a Hasselblad with wings. In its triple camera system, you'll find a 100MP Hasselblad lens that takes the most beautiful photos and 6K/60fps videos a consumer drone possibly can.</p><div class="product"><a data-dimension112="3ac096e6-4e1e-4971-9e7e-30464b6992e6" data-action="Deal Block" data-label="The DJI Mavic 4 Pro is the best consumer drone money can buy right now, period. It improves on its predecessor by introducing 6K/60fps video, 100MP stills powered by a Hasselblad camera, and a brand new RC Pro 2 controller that makes flying a breeze. With a long flight time and 5-star performance across the board, it’s the ideal drone for commercial and personal use." data-dimension48="The DJI Mavic 4 Pro is the best consumer drone money can buy right now, period. It improves on its predecessor by introducing 6K/60fps video, 100MP stills powered by a Hasselblad camera, and a brand new RC Pro 2 controller that makes flying a breeze. With a long flight time and 5-star performance across the board, it’s the ideal drone for commercial and personal use." data-dimension25="$2199" href="https://www.adorama.com/dji-mavic-4-pro-drone-rc-2/p/djimavic4pro" 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:78.87%;"><img id="FLhhHkzuKaHKo4MFwNfgDC" name="DJI Mavic 4 Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FLhhHkzuKaHKo4MFwNfgDC.jpg" mos="" align="middle" fullscreen="" width="1500" height="1183" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The DJI Mavic 4 Pro is the best consumer drone money can buy right now, period. It improves on its predecessor by introducing 6K/60fps video, 100MP stills powered by a Hasselblad camera, and a brand new RC Pro 2 controller that makes flying a breeze. With a long flight time and 5-star performance across the board, it’s the ideal drone for commercial and personal use.<a class="view-deal button" href="https://www.adorama.com/dji-mavic-4-pro-drone-rc-2/p/djimavic4pro" target="_blank" rel="nofollow" data-dimension112="3ac096e6-4e1e-4971-9e7e-30464b6992e6" data-action="Deal Block" data-label="The DJI Mavic 4 Pro is the best consumer drone money can buy right now, period. It improves on its predecessor by introducing 6K/60fps video, 100MP stills powered by a Hasselblad camera, and a brand new RC Pro 2 controller that makes flying a breeze. With a long flight time and 5-star performance across the board, it’s the ideal drone for commercial and personal use." data-dimension48="The DJI Mavic 4 Pro is the best consumer drone money can buy right now, period. It improves on its predecessor by introducing 6K/60fps video, 100MP stills powered by a Hasselblad camera, and a brand new RC Pro 2 controller that makes flying a breeze. With a long flight time and 5-star performance across the board, it’s the ideal drone for commercial and personal use." data-dimension25="$2199">View Deal</a></p></div><p>What I love most about the Mavic 4 Pro is the <a href="https://www.tomsguide.com/cameras-photography/drones/i-just-tested-the-new-dji-rc-pro-2-drone-controller-and-its-a-beast-for-content-creation-on-the-fly">RC Pro 2 controller</a>, which feels revolutionary. It's extremely bright with a peak brightness of 2,000 nits, and highly responsive. And because the Mavic 4 Pro has a 'Infinity Gimbal' capable of full 360° rotation, the RC Pro 2's screen rotates and puts the drone into vertical shooting mode, negating the need to manually toggle the orientation. All in all, it's a solid package that's well worth the premium.</p><h2 class="article-body__section" id="section-my-favorite-earbuds"><span>My favorite earbuds</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="tvZF87w5dAniyx6zSwXbZb" name="Sony_WF_C710N_ 8.JPG" alt="A pair of Glass Blue Sony WF-C710N wireless earbuds." src="https://cdn.mos.cms.futurecdn.net/tvZF87w5dAniyx6zSwXbZb.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>Alongside cameras and drones, I thoroughly enjoy testing audio gear as I love music and analyzing every aspect of a soundstage. The <a href="https://www.tomsguide.com/audio/earbuds/sony-wf-c710n-wireless-earbuds-review">Sony WF-C710N</a> are my favorite earbuds I've tested so far, and it has a lot to do with their sleek, see-through design and powerful sound quality. They give the pricier <a href="https://www.tomsguide.com/audio/earbuds/bose-quietcomfort-earbuds-2024-review">Bose QuietComforts</a> a run for their money, to be honest.</p><div class="product"><a data-dimension112="c25a82e2-9693-4fd8-b81d-1aa21534692f" data-action="Deal Block" data-label="The Sony WF-C710Ns build on the success of the WF-C700Ns, introducing touch controls, wear detection and new, stylish colorways. The earbuds make basslines sound powerful and vocals sound clear, and a user-friendly app lets you customize the EQ to your heart’s content." data-dimension48="The Sony WF-C710Ns build on the success of the WF-C700Ns, introducing touch controls, wear detection and new, stylish colorways. The earbuds make basslines sound powerful and vocals sound clear, and a user-friendly app lets you customize the EQ to your heart’s content." data-dimension25="$119" href="https://www.amazon.com/dp/B0DWHB886R/" 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:120.00%;"><img id="r3fsKfXfrYb8dNBNK7cdoP" name="Sony C710N" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/r3fsKfXfrYb8dNBNK7cdoP.jpg" mos="" align="middle" fullscreen="" width="1000" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Sony WF-C710Ns build on the success of the WF-C700Ns, introducing touch controls, wear detection and new, stylish colorways. The earbuds make basslines sound powerful and vocals sound clear, and a user-friendly app lets you customize the EQ to your heart’s content.<a class="view-deal button" href="https://www.amazon.com/dp/B0DWHB886R/" target="_blank" rel="nofollow" data-dimension112="c25a82e2-9693-4fd8-b81d-1aa21534692f" data-action="Deal Block" data-label="The Sony WF-C710Ns build on the success of the WF-C700Ns, introducing touch controls, wear detection and new, stylish colorways. The earbuds make basslines sound powerful and vocals sound clear, and a user-friendly app lets you customize the EQ to your heart’s content." data-dimension48="The Sony WF-C710Ns build on the success of the WF-C700Ns, introducing touch controls, wear detection and new, stylish colorways. The earbuds make basslines sound powerful and vocals sound clear, and a user-friendly app lets you customize the EQ to your heart’s content." data-dimension25="$119">View Deal</a></p></div><p>With up to 33.5 hours of battery life and highly effective ANC that rivals Bose, the WF-C710Ns are some of the finest buds you can get for under $120. I haven't stopped thinking about them since I tested them. Alongside their good looks, the earbuds also boast incredible bass response even though they're tiny, and deliver consistent sound across genres.</p><h2 class="article-body__section" id="section-my-favorite-headphones"><span>My favorite headphones</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="kC6siR6S2Cwp2ScDKWL2Ti" name="JLab_Epic_Lux_Lab_Edition_.JPG" alt="Black JLab Epic Lux Lab Edition over-ear headphones" src="https://cdn.mos.cms.futurecdn.net/kC6siR6S2Cwp2ScDKWL2Ti.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>Over-ear headphones are my go-to as I find them more comfortable than in-ear buds. Though I use the Marshall Monitor IIIs every day, I didn't have the pleasure of reviewing them, so my favorite headphones that I've personally reviewed are the <a href="https://www.tomsguide.com/audio/over-ear-headphones/jlab-epic-lux-lab-edition-review">JLab Epic Lux Lab Editions</a>. I adore these cans as they're extremely comfortable, thanks to their plush faux leather ear cushions and light weight.</p><div class="product"><a data-dimension112="1baa1f35-718e-4382-957f-d5428b8bdd82" data-action="Deal Block" data-label="The JLab Epic Lux Lab Edition headphones pack a punch with their 32mm dynamic drivers that produce a wide soundstage, and you get active noise cancelation and up to 90 hours of battery life. Most genres sound fantastic and their plush earcups and mesh headband ensure you can keep listening for long periods of time." data-dimension48="The JLab Epic Lux Lab Edition headphones pack a punch with their 32mm dynamic drivers that produce a wide soundstage, and you get active noise cancelation and up to 90 hours of battery life. Most genres sound fantastic and their plush earcups and mesh headband ensure you can keep listening for long periods of time." data-dimension25="$199" href="https://www.amazon.com/JLab-Epic-Wireless-Headphones-Graphite/dp/B0DRDNJNTD/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:943px;"><p class="vanilla-image-block" style="padding-top:159.07%;"><img id="naab9kQoe9jnyUz73sJU8J" name="Jlab-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/naab9kQoe9jnyUz73sJU8J.jpg" mos="" align="middle" fullscreen="" width="943" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The JLab Epic Lux Lab Edition headphones pack a punch with their 32mm dynamic drivers that produce a wide soundstage, and you get active noise cancelation and up to 90 hours of battery life. Most genres sound fantastic and their plush earcups and mesh headband ensure you can keep listening for long periods of time.<a class="view-deal button" href="https://www.amazon.com/JLab-Epic-Wireless-Headphones-Graphite/dp/B0DRDNJNTD/" target="_blank" rel="nofollow" data-dimension112="1baa1f35-718e-4382-957f-d5428b8bdd82" data-action="Deal Block" data-label="The JLab Epic Lux Lab Edition headphones pack a punch with their 32mm dynamic drivers that produce a wide soundstage, and you get active noise cancelation and up to 90 hours of battery life. Most genres sound fantastic and their plush earcups and mesh headband ensure you can keep listening for long periods of time." data-dimension48="The JLab Epic Lux Lab Edition headphones pack a punch with their 32mm dynamic drivers that produce a wide soundstage, and you get active noise cancelation and up to 90 hours of battery life. Most genres sound fantastic and their plush earcups and mesh headband ensure you can keep listening for long periods of time." data-dimension25="$199">View Deal</a></p></div><p>The Epic Lux Lab Editions sound fantastic too, boasting a refined and well-balanced sound profile. The wide soundstage features great sub- and mid-bass, clean and crisp treble, and outstanding lows and mids. Also packing effective ANC and long battery life of up to 90 hours (ANC off), it's hard to beat these mid-range headphones.</p><h2 class="article-body__section" id="section-my-favorite-speaker"><span>My favorite speaker</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="3CYoYoEcxdUdh2cJwmrusH" name="Marshall_Bromley750_ 7.JPG" alt="A black and brass Marshall Bromley 750 party speaker" src="https://cdn.mos.cms.futurecdn.net/3CYoYoEcxdUdh2cJwmrusH.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>For this category, I was spoiled for choice. I could have picked any of the <a href="https://www.tomsguide.com/us/best-bluetooth-speakers,review-1982.html">best portable Bluetooth speakers</a> I've tested but instead, I chose to go for a different kind of speaker — a party speaker. The <a href="https://www.tomsguide.com/audio/bluetooth-speakers/marshall-bromley-750-review">Marshall Bromley 750</a> is my favorite speaker I've tested yet, and though it has a very specific use case, <a href="https://www.tomsguide.com/audio/bluetooth-speakers/as-a-guitarist-and-an-audiophile-this-is-the-all-in-one-speaker-ive-been-waiting-for">it's the all-in-one speaker I've been waiting for as a guitarist and an audiophile</a>.</p><div class="product"><a data-dimension112="444fdc15-fafe-4320-8ea8-c72b93a0ab60" data-action="Deal Block" data-label="Thanks to a plethora of wired and wireless connectivity options, this party speaker doubles (or triples) as a guitar amp and a karaoke machine, while delivering powerful sound quality when you’re listening to music. A massive 500W power output makes the bass sound loud and refined, while vocals are crystal clear. Sporting Marshall’s trademark premium design and build quality, the Bromley 750 is a force to be reckoned with." data-dimension48="Thanks to a plethora of wired and wireless connectivity options, this party speaker doubles (or triples) as a guitar amp and a karaoke machine, while delivering powerful sound quality when you’re listening to music. A massive 500W power output makes the bass sound loud and refined, while vocals are crystal clear. Sporting Marshall’s trademark premium design and build quality, the Bromley 750 is a force to be reckoned with." data-dimension25="$1299" href="https://www.amazon.com/Marshall-Bromley-Portable-Wireless-Speaker/dp/B0FTZXFVJ1/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1294px;"><p class="vanilla-image-block" style="padding-top:115.92%;"><img id="5VnWQZR5GSzbp9Xz2zLhd9" name="bromley-750-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5VnWQZR5GSzbp9Xz2zLhd9.jpg" mos="" align="middle" fullscreen="" width="1294" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Thanks to a plethora of wired and wireless connectivity options, this party speaker doubles (or triples) as a guitar amp and a karaoke machine, while delivering powerful sound quality when you’re listening to music. A massive 500W power output makes the bass sound loud and refined, while vocals are crystal clear. Sporting Marshall’s trademark premium design and build quality, the Bromley 750 is a force to be reckoned with.<a class="view-deal button" href="https://www.amazon.com/Marshall-Bromley-Portable-Wireless-Speaker/dp/B0FTZXFVJ1/" target="_blank" rel="nofollow" data-dimension112="444fdc15-fafe-4320-8ea8-c72b93a0ab60" data-action="Deal Block" data-label="Thanks to a plethora of wired and wireless connectivity options, this party speaker doubles (or triples) as a guitar amp and a karaoke machine, while delivering powerful sound quality when you’re listening to music. A massive 500W power output makes the bass sound loud and refined, while vocals are crystal clear. Sporting Marshall’s trademark premium design and build quality, the Bromley 750 is a force to be reckoned with." data-dimension48="Thanks to a plethora of wired and wireless connectivity options, this party speaker doubles (or triples) as a guitar amp and a karaoke machine, while delivering powerful sound quality when you’re listening to music. A massive 500W power output makes the bass sound loud and refined, while vocals are crystal clear. Sporting Marshall’s trademark premium design and build quality, the Bromley 750 is a force to be reckoned with." data-dimension25="$1299">View Deal</a></p></div><p>The Bromley 750 doubles (or triples) as a guitar amp and a karaoke machine, and it boasts peerless sound quality. The incredible bass response makes you want to headbang while the vibrant treble and crystal clear vocals make you appreciate your favorite artists more than you did before. It also features beautiful integrated LED lighting which dances and reacts to the track you're playing. It's a sound and light show for the price of one.</p><h2 class="article-body__section" id="section-my-favorite-computer-speakers"><span>My favorite computer speakers</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="2tYjsK8nk4p26P3SZpEBMb" name="Edifier_QR65_ 5.JPG" alt="Edifier QR65 gaming and computer speakers in black" src="https://cdn.mos.cms.futurecdn.net/2tYjsK8nk4p26P3SZpEBMb.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>The <a href="https://www.tomsguide.com/gaming/gaming-peripherals/edifier-qr65-review">Edifier QR65</a> are the <a href="https://www.tomsguide.com/us/best-computer-speakers,review-6355.html">best desktop speakers</a> I've tested, and I loved them so much that <a href="https://www.tomsguide.com/audio/speakers/edifier-qr65-premium-speakers-from-a-traditionally-budget-brand">they're still sitting on my office desk</a>. Their gorgeous design is a sight to behold as each speaker is lit up with panels of LED lights which look like infinity mirror tunnels. But that's not even their biggest selling point — the sound quality and connectivity options are where it's at.</p><div class="product"><a data-dimension112="30e0781b-ff2d-47c6-b1e9-dbd1a363f103" data-action="Deal Block" data-label="If you want a pair of desktop speakers that not only sound good but look downright fantastic too, the Edifier QR65 should be your port of call. Each speaker features LED panels with customizable lighting, and there are plenty of wireless and wired connectivity options, making them extremely versatile. These well-endowed speakers deliver punchy, meaty bass and clear vocals in video games and while listening to music." data-dimension48="If you want a pair of desktop speakers that not only sound good but look downright fantastic too, the Edifier QR65 should be your port of call. Each speaker features LED panels with customizable lighting, and there are plenty of wireless and wired connectivity options, making them extremely versatile. These well-endowed speakers deliver punchy, meaty bass and clear vocals in video games and while listening to music." data-dimension25="$499" href="https://www.amazon.com/Edifier-QR65-Bookshelf-Bluetooth-Subwoofer/dp/B0CPSNSSB5/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1342px;"><p class="vanilla-image-block" style="padding-top:65.57%;"><img id="dCJL3fBBESpxt3YJK58DkF" name="QR65-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dCJL3fBBESpxt3YJK58DkF.jpg" mos="" align="middle" fullscreen="" width="1342" height="880" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you want a pair of desktop speakers that not only sound good but look downright fantastic too, the Edifier QR65 should be your port of call. Each speaker features LED panels with customizable lighting, and there are plenty of wireless and wired connectivity options, making them extremely versatile. These well-endowed speakers deliver punchy, meaty bass and clear vocals in video games and while listening to music.<a class="view-deal button" href="https://www.amazon.com/Edifier-QR65-Bookshelf-Bluetooth-Subwoofer/dp/B0CPSNSSB5/" target="_blank" rel="nofollow" data-dimension112="30e0781b-ff2d-47c6-b1e9-dbd1a363f103" data-action="Deal Block" data-label="If you want a pair of desktop speakers that not only sound good but look downright fantastic too, the Edifier QR65 should be your port of call. Each speaker features LED panels with customizable lighting, and there are plenty of wireless and wired connectivity options, making them extremely versatile. These well-endowed speakers deliver punchy, meaty bass and clear vocals in video games and while listening to music." data-dimension48="If you want a pair of desktop speakers that not only sound good but look downright fantastic too, the Edifier QR65 should be your port of call. Each speaker features LED panels with customizable lighting, and there are plenty of wireless and wired connectivity options, making them extremely versatile. These well-endowed speakers deliver punchy, meaty bass and clear vocals in video games and while listening to music." data-dimension25="$499">View Deal</a></p></div><p>You've got the option for wired and wireless playback, as well as a built-in GaN charger that can pump out 65W total power to charge your external devices, essentially making the QR65 a power source. The sound is phenomenal in battle sequences as well as dialogue-heavy cutscenes. Oh, and you get hi-res playback for music, so what's not to love?</p><h2 class="article-body__section" id="section-my-favorite-gaming-controller"><span>My favorite gaming controller</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="DfYJSYEjryG3KqPWvQ5fag" name="Turtle_Beach_Victrix_controller_.JPG" alt="A white Turtle Beach Victrix Pro BFG Reloaded controller for the PS5" src="https://cdn.mos.cms.futurecdn.net/DfYJSYEjryG3KqPWvQ5fag.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>I LOVE gaming. Yes, the all-caps was necessary. If I have free time on my hands and I'm not spending it with my partner, you'll find me playing RPGs on my <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim">PS5 Slim</a>. While I love the DualSense, the second controller I have is the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/turtle-beach-victrix-pro-bfg-reloaded-review">Turtle Beach Victrix Pro BFG Reloaded</a>. It's extremely customizable thanks to its 11 interchangeable components, and boy is it comfortable for hours and hours on end.</p><div class="product"><a data-dimension112="2d4ae8f8-ec18-46b2-a165-7823eea0db5b" data-action="Deal Block" data-label="The Turtle Beach Victrix Pro BFG Reloaded improves on its predecessor by introducing Hall Effect thumbsticks and triggers with five stop switches. These are extremely responsive and so are the four on-the-fly customizable back buttons. The gamepad’s biggest selling point is its modular design and 11 interchangeable components which make it suitable for nearly every genre." data-dimension48="The Turtle Beach Victrix Pro BFG Reloaded improves on its predecessor by introducing Hall Effect thumbsticks and triggers with five stop switches. These are extremely responsive and so are the four on-the-fly customizable back buttons. The gamepad’s biggest selling point is its modular design and 11 interchangeable components which make it suitable for nearly every genre." data-dimension25="$209" href="https://www.amazon.com/Gaming-Controller-PlayStation-Hall-Effect-Customizable-Console/dp/B0FD6697KT/" 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="xjrw7Rmbwt8MsiCC9cSC6d" name="TB-Victrix-BFGR-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/xjrw7Rmbwt8MsiCC9cSC6d.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Turtle Beach Victrix Pro BFG Reloaded improves on its predecessor by introducing Hall Effect thumbsticks and triggers with five stop switches. These are extremely responsive and so are the four on-the-fly customizable back buttons. The gamepad’s biggest selling point is its modular design and 11 interchangeable components which make it suitable for nearly every genre.<a class="view-deal button" href="https://www.amazon.com/Gaming-Controller-PlayStation-Hall-Effect-Customizable-Console/dp/B0FD6697KT/" target="_blank" rel="nofollow" data-dimension112="2d4ae8f8-ec18-46b2-a165-7823eea0db5b" data-action="Deal Block" data-label="The Turtle Beach Victrix Pro BFG Reloaded improves on its predecessor by introducing Hall Effect thumbsticks and triggers with five stop switches. These are extremely responsive and so are the four on-the-fly customizable back buttons. The gamepad’s biggest selling point is its modular design and 11 interchangeable components which make it suitable for nearly every genre." data-dimension48="The Turtle Beach Victrix Pro BFG Reloaded improves on its predecessor by introducing Hall Effect thumbsticks and triggers with five stop switches. These are extremely responsive and so are the four on-the-fly customizable back buttons. The gamepad’s biggest selling point is its modular design and 11 interchangeable components which make it suitable for nearly every genre." data-dimension25="$209">View Deal</a></p></div><p>Featuring four customizable back buttons and highly responsive Hall Effect triggers and thumbsticks, the Victrix Pro BFG is one of the most powerful controllers I've tested. The magnetic components give me a competitive edge in FPS and racing titles, and I love how easy it is to adjust their sensitivity via the user-friendly companion software.</p><h2 class="article-body__section" id="section-my-favorite-gaming-headset"><span>My favorite gaming headset</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="GpfBkyLC7sHowFayYMcEdV" name="Razer_Blackshark_pro 9.JPG" alt="A black Razer BlackShark V3 Pro wireless gaming headset" src="https://cdn.mos.cms.futurecdn.net/GpfBkyLC7sHowFayYMcEdV.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>Alongside the aforementioned Turtle Beach Victrix Pro BFG Reloaded, the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/razer-blackshark-v3-pro-review">Razer BlackShark V3 Pro</a> is also a permanent part of my gaming setup. I haven't used a better <a href="https://www.tomsguide.com/best-picks/best-gaming-headsets">gaming headset</a>, as the BlackShark V3 Pro makes my favorite games sound the best they ever have, thanks to its wide soundstage and spatial audio support.</p><div class="product"><a data-dimension112="df547f87-5517-477b-af69-0f4f6c272966" data-action="Deal Block" data-label="Designed for professional gamers, the Razer BlackShark V3 Pro boasts fantastic sound with spatial audio support that gives you a competitive edge. It’s extremely comfortable, features highly effective ANC, and comes with a detachable mic that makes you sound loud and clear. No compromises have been made, and you’re getting your money’s worth." data-dimension48="Designed for professional gamers, the Razer BlackShark V3 Pro boasts fantastic sound with spatial audio support that gives you a competitive edge. It’s extremely comfortable, features highly effective ANC, and comes with a detachable mic that makes you sound loud and clear. No compromises have been made, and you’re getting your money’s worth." data-dimension25="$249" href="https://www.amazon.com/Razer-BlackShark-Wireless-Gaming-Headset-PC/dp/B0F3QDLZKG/" 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="iFdB8fgzyU6X4P2WfMj9QN" name="Razer-BlackShark-V3-Pro-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iFdB8fgzyU6X4P2WfMj9QN.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Designed for professional gamers, the Razer BlackShark V3 Pro boasts fantastic sound with spatial audio support that gives you a competitive edge. It’s extremely comfortable, features highly effective ANC, and comes with a detachable mic that makes you sound loud and clear. No compromises have been made, and you’re getting your money’s worth.<a class="view-deal button" href="https://www.amazon.com/Razer-BlackShark-Wireless-Gaming-Headset-PC/dp/B0F3QDLZKG/" target="_blank" rel="nofollow" data-dimension112="df547f87-5517-477b-af69-0f4f6c272966" data-action="Deal Block" data-label="Designed for professional gamers, the Razer BlackShark V3 Pro boasts fantastic sound with spatial audio support that gives you a competitive edge. It’s extremely comfortable, features highly effective ANC, and comes with a detachable mic that makes you sound loud and clear. No compromises have been made, and you’re getting your money’s worth." data-dimension48="Designed for professional gamers, the Razer BlackShark V3 Pro boasts fantastic sound with spatial audio support that gives you a competitive edge. It’s extremely comfortable, features highly effective ANC, and comes with a detachable mic that makes you sound loud and clear. No compromises have been made, and you’re getting your money’s worth." data-dimension25="$249">View Deal</a></p></div><p><a href="https://www.tomsguide.com/gaming/clair-obscur-expedition-33-review">Clair Obscur: Expedition 33</a> is one of my favorite games of all time, and trust me when I say the headset makes <em>you </em>feel like <em>you're </em>the one taking down the Paintress. The bass is powerful but never booming so you can feel every explosion, feel the emotion in every dialogue, and appreciate the epic in-game soundtracks. The BlackShark V3 Pro also features the best ANC I've tested on gaming cans, which further aids your immersion.</p><h2 class="article-body__section" id="section-my-favorite-keyboard"><span>My favorite keyboard</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="rFL7g25RFLeTcHVnW2nFub" name="HexGears_A3_16x9" alt="A black Hexgears Immersion A3 TKL hot-swappable mechanical low-profile keyboard" src="https://cdn.mos.cms.futurecdn.net/rFL7g25RFLeTcHVnW2nFub.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>You know the type of product I've reviewed the most? Yes, even more than cameras? It's keyboards. That's not surprising given that there are so many out there — mechanical, Hall Effect, membrane, you name it. The one I keep coming back to and the one I use when I work from home is the <a href="https://www.tomsguide.com/computing/peripherals/hexgears-immersion-a3-tkl-review">Hexgears Immersion A3 TKL</a>. It's quiet, it's sleek, and it's a joy to type on.</p><div class="product"><a data-dimension112="7989878e-8a95-4a52-8589-be19917d0445" data-action="Deal Block" data-label="The Hexgears Immersion A3 TKL is a fantastic, low-profile keyboard for productivity, thanks to its super-silent Kailh linear switches. Its 1,000Hz polling rate is also well-suited to casual gaming, and its sturdy build and customizable RGB and TFT screen make it a joy to use." data-dimension48="The Hexgears Immersion A3 TKL is a fantastic, low-profile keyboard for productivity, thanks to its super-silent Kailh linear switches. Its 1,000Hz polling rate is also well-suited to casual gaming, and its sturdy build and customizable RGB and TFT screen make it a joy to use." data-dimension25="$89" href="https://www.amazon.com/Hexgears-Immersion-A3-Low-Profile-Hot-Swappable/dp/B0D986JN9F/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1497px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="cJXmt94ox3BRqMu7Lk5oyk" name="Hexgears Immersion A3 TKL" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cJXmt94ox3BRqMu7Lk5oyk.jpg" mos="" align="middle" fullscreen="" width="1497" height="1497" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Hexgears Immersion A3 TKL is a fantastic, low-profile keyboard for productivity, thanks to its super-silent Kailh linear switches. Its 1,000Hz polling rate is also well-suited to casual gaming, and its sturdy build and customizable RGB and TFT screen make it a joy to use.<a class="view-deal button" href="https://www.amazon.com/Hexgears-Immersion-A3-Low-Profile-Hot-Swappable/dp/B0D986JN9F/" target="_blank" rel="nofollow" data-dimension112="7989878e-8a95-4a52-8589-be19917d0445" data-action="Deal Block" data-label="The Hexgears Immersion A3 TKL is a fantastic, low-profile keyboard for productivity, thanks to its super-silent Kailh linear switches. Its 1,000Hz polling rate is also well-suited to casual gaming, and its sturdy build and customizable RGB and TFT screen make it a joy to use." data-dimension48="The Hexgears Immersion A3 TKL is a fantastic, low-profile keyboard for productivity, thanks to its super-silent Kailh linear switches. Its 1,000Hz polling rate is also well-suited to casual gaming, and its sturdy build and customizable RGB and TFT screen make it a joy to use." data-dimension25="$89">View Deal</a></p></div><p>The Immersion A3 TKL features lovely, soft, matte polycarbonate plastic (PC) keycaps that feel great to touch and type on. I can type quickly thanks to the highly responsive Kailh White Rain linear switches, and the very low-profile design means my hands don't feel fatigued. One of my favorite features, though, is the customizable TFT screen which I can display GIFs on to add some personality to my workspace.</p><h2 class="article-body__section" id="section-my-favorite-mouse"><span>My favorite mouse</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="V7W95XZzeiyaZ7x4QznsZB" name="Corsair_M75_.JPG" alt="A Glacier Blue Corsair M75 wireless gaming mouse for Mac" src="https://cdn.mos.cms.futurecdn.net/V7W95XZzeiyaZ7x4QznsZB.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>Having the <a href="https://www.tomsguide.com/best-picks/best-mouse">best mouse</a> at my disposal is integral to my work setup, regardless of whether I'm working from home or in the office. Though I've tested a bunch, my favorite is the <a href="https://www.tomsguide.com/computing/peripherals/corsair-m75-mac-mouse-review">Corsair M75 for Mac</a>, which is currently a permanent part of my WFH setup. It's the Mac-specific variant of the base M75 and comes in a stunning Glacier Blue color — a sight for sore eyes, really.</p><div class="product"><a data-dimension112="906b5510-32c3-4dcd-8400-ca08f36ba127" data-action="Deal Block" data-label="The Corsair M75 for Mac is designed exceptionally well, with responsive optical switches. This minimalist-looking mouse features 26,000 DPI sensitivity that you can change on the fly, making it suitable for all kinds of gaming titles. It’s very comfortable to use for long hours, and the detailed iCUE software offers in-depth customization." data-dimension48="The Corsair M75 for Mac is designed exceptionally well, with responsive optical switches. This minimalist-looking mouse features 26,000 DPI sensitivity that you can change on the fly, making it suitable for all kinds of gaming titles. It’s very comfortable to use for long hours, and the detailed iCUE software offers in-depth customization." data-dimension25="$129" href="https://www.apple.com/shop/product/hryt2zm/a/corsair-m75-wireless-lightweight-rgb-gaming-mouse" 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="RkKoGb3Cd42vjwqQSo5PH3" name="Corsair M75 Mac deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/RkKoGb3Cd42vjwqQSo5PH3.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Corsair M75 for Mac is designed exceptionally well, with responsive optical switches. This minimalist-looking mouse features 26,000 DPI sensitivity that you can change on the fly, making it suitable for all kinds of gaming titles. It’s very comfortable to use for long hours, and the detailed iCUE software offers in-depth customization.<a class="view-deal button" href="https://www.apple.com/shop/product/hryt2zm/a/corsair-m75-wireless-lightweight-rgb-gaming-mouse" target="_blank" rel="nofollow" data-dimension112="906b5510-32c3-4dcd-8400-ca08f36ba127" data-action="Deal Block" data-label="The Corsair M75 for Mac is designed exceptionally well, with responsive optical switches. This minimalist-looking mouse features 26,000 DPI sensitivity that you can change on the fly, making it suitable for all kinds of gaming titles. It’s very comfortable to use for long hours, and the detailed iCUE software offers in-depth customization." data-dimension48="The Corsair M75 for Mac is designed exceptionally well, with responsive optical switches. This minimalist-looking mouse features 26,000 DPI sensitivity that you can change on the fly, making it suitable for all kinds of gaming titles. It’s very comfortable to use for long hours, and the detailed iCUE software offers in-depth customization." data-dimension25="$129">View Deal</a></p></div><p>With a maximum DPI of 26,000 and a 1,000Hz polling rate, the M75 is excellent for casual gaming, and the one to beat when it comes to productivity. Its buttons are clicky and highly responsive, and they're wide enough for maximum comfort too. The shape of the mouse feels lovely under my palm. I have no qualms with the M75 — it's one of the best mice money can buy today.</p><h2 class="article-body__section" id="section-my-favorite-monitor"><span>My favorite monitor</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="QNRDFZeT3YNmyev77Wgxq4" name="MSI_QD_OLED_14.JPG" alt="An MSI MPG 272URX QD-OLED gaming monitor" src="https://cdn.mos.cms.futurecdn.net/QNRDFZeT3YNmyev77Wgxq4.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>I spend up to eight hours five days a week looking at a screen — or three, if I'm in the office. As the person responsible for lab testing <a href="https://www.tomsguide.com/best-picks/best-monitors">monitors</a> for the reviews team in the U.K., I've reviewed my fair share, and none have come close to the <a href="https://www.tomsguide.com/computing/monitors/msi-mpg-272urx-qd-oled-monitor-review">MSI MPG 272URX QD-OLED</a>. It's one of the most powerful monitors I've tested, for both gaming and productivity. It's a hybrid beast.</p><div class="product"><a data-dimension112="95af39b3-e399-4653-9ff5-7e6967418f5c" data-action="Deal Block" data-label="The MSI MPG 272URX QD-OLED is a powerful monitor for work and play. It delivers vivid colors in gaming and boasts great color accuracy for photo/video editing. Its 240Hz refresh rate and 0.03ms response time ensure buttery smooth gameplay, making it great for competitive gaming." data-dimension48="The MSI MPG 272URX QD-OLED is a powerful monitor for work and play. It delivers vivid colors in gaming and boasts great color accuracy for photo/video editing. Its 240Hz refresh rate and 0.03ms response time ensure buttery smooth gameplay, making it great for competitive gaming." data-dimension25="$1099" href="https://www.amazon.com/MSI-MPG-272URX-QD-OLED-Adaptive-Synch/dp/B0DWYC5S8X/" 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="rFrCdYdcaTzPfcK67PTWt8" name="MSI MPG 272URX QD-OLED" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/rFrCdYdcaTzPfcK67PTWt8.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The MSI MPG 272URX QD-OLED is a powerful monitor for work and play. It delivers vivid colors in gaming and boasts great color accuracy for photo/video editing. Its 240Hz refresh rate and 0.03ms response time ensure buttery smooth gameplay, making it great for competitive gaming.<a class="view-deal button" href="https://www.amazon.com/MSI-MPG-272URX-QD-OLED-Adaptive-Synch/dp/B0DWYC5S8X/" target="_blank" rel="nofollow" data-dimension112="95af39b3-e399-4653-9ff5-7e6967418f5c" data-action="Deal Block" data-label="The MSI MPG 272URX QD-OLED is a powerful monitor for work and play. It delivers vivid colors in gaming and boasts great color accuracy for photo/video editing. Its 240Hz refresh rate and 0.03ms response time ensure buttery smooth gameplay, making it great for competitive gaming." data-dimension48="The MSI MPG 272URX QD-OLED is a powerful monitor for work and play. It delivers vivid colors in gaming and boasts great color accuracy for photo/video editing. Its 240Hz refresh rate and 0.03ms response time ensure buttery smooth gameplay, making it great for competitive gaming." data-dimension25="$1099">View Deal</a></p></div><p>With its 240Hz refresh rate, 0.03ms response time, and 4K QD-OLED 27-inch panel, it's an utter delight to game and work on. Colors are bright, vivid and accurate, while there's plenty of detail revealed in the shadows and dark areas, especially when playing horror games. Games feel immersive and you can lose yourself while playing them. Equally, you can lock into work because the 27-inch panel lets you make quick work of navigating massive spreadsheets and long threads on Slack.</p><h2 class="article-body__section" id="section-my-favorite-shoes"><span>My favorite shoes</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="2FskxujEacK367StSBf3Ug" name="Keen_Zionic_NXT_ 5.JPG" alt="A pair of Keen Zionic NXT Mid Waterproof hiking boots" src="https://cdn.mos.cms.futurecdn.net/2FskxujEacK367StSBf3Ug.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>Keen knows how to make a good pair of <a href="https://www.tomsguide.com/best-picks/best-hiking-boots">hiking boots</a>, and my favorites that I've reviewed (and still use every day) are the <a href="https://www.tomsguide.com/wellness/fitness/keen-zionic-nxt-mid-waterproof-hiking-boots-review">Keen Zionic NXT Mid Waterproof</a>. When I reviewed them in fall 2025, I tested them by walking 50 miles through streams, on mountains and even a glacier in Iceland, and because of how well they performed, they became my daily drivers (well, when I'm not wearing my Doc Martens, at least).</p><div class="product"><a data-dimension112="b40d5e54-e497-4428-92a5-a23da7d0e2f1" data-action="Deal Block" data-label="The Keen Zionic NXT Mid Waterproofs have quickly become my go-to hiking boots. They’re extremely comfortable and can be worn straight out of the box. There’s plenty of space inside to wear two layers of socks, and they fit snugly. Their 4mm multi-directional lugs provide great grip in both wet and dry conditions. While they don’t utilize Gore-Tex, Keen’s proprietary waterproofing works very well and keeps your feet dry." data-dimension48="The Keen Zionic NXT Mid Waterproofs have quickly become my go-to hiking boots. They’re extremely comfortable and can be worn straight out of the box. There’s plenty of space inside to wear two layers of socks, and they fit snugly. Their 4mm multi-directional lugs provide great grip in both wet and dry conditions. While they don’t utilize Gore-Tex, Keen’s proprietary waterproofing works very well and keeps your feet dry." data-dimension25="$195" href="https://www.amazon.com/KEEN-Womens-Waterproof-Terrain-Comfortable/dp/B0DM3LGQ4P/" 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:70.50%;"><img id="6ZCgsvRwChzDJ9bBJYJVAN" name="Keen-Zionic-NXT-deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/6ZCgsvRwChzDJ9bBJYJVAN.png" mos="" align="middle" fullscreen="" width="1356" height="956" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Keen Zionic NXT Mid Waterproofs have quickly become my go-to hiking boots. They’re extremely comfortable and can be worn straight out of the box. There’s plenty of space inside to wear two layers of socks, and they fit snugly. Their 4mm multi-directional lugs provide great grip in both wet and dry conditions. While they don’t utilize Gore-Tex, Keen’s proprietary waterproofing works very well and keeps your feet dry.<a class="view-deal button" href="https://www.amazon.com/KEEN-Womens-Waterproof-Terrain-Comfortable/dp/B0DM3LGQ4P/" target="_blank" rel="nofollow" data-dimension112="b40d5e54-e497-4428-92a5-a23da7d0e2f1" data-action="Deal Block" data-label="The Keen Zionic NXT Mid Waterproofs have quickly become my go-to hiking boots. They’re extremely comfortable and can be worn straight out of the box. There’s plenty of space inside to wear two layers of socks, and they fit snugly. Their 4mm multi-directional lugs provide great grip in both wet and dry conditions. While they don’t utilize Gore-Tex, Keen’s proprietary waterproofing works very well and keeps your feet dry." data-dimension48="The Keen Zionic NXT Mid Waterproofs have quickly become my go-to hiking boots. They’re extremely comfortable and can be worn straight out of the box. There’s plenty of space inside to wear two layers of socks, and they fit snugly. Their 4mm multi-directional lugs provide great grip in both wet and dry conditions. While they don’t utilize Gore-Tex, Keen’s proprietary waterproofing works very well and keeps your feet dry." data-dimension25="$195">View Deal</a></p></div><p>The Zionic NXT Mids are supremely comfortable and don't need to be broken in. Keen's 'Contoured Fit' means the boots are more streamlined than a straight or wide fit, making the Zionic NXT Mids fit snugly around my feet. There's plenty of bounce in the foam insoles so it feels like I'm walking on clouds, and they're extremely waterproof — my feet have gone straight into ankle-deep water and no water has made it through to my socks.</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/cameras-photography/best-photos-i-ve-taken-on-cameras-reviewed-2025">I’ve reviewed nearly 30 cameras in 2025: these are the best photos I’ve taken on instant, film and mirrorless</a></li><li><a href="https://www.tomsguide.com/cameras-photography/drones/best-footage-i-ve-taken-on-drones-reviewed-2025">I reviewed every drone that came out in 2025: these are the best photos and videos I’ve taken</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/ive-always-wanted-a-playstation-portal-but-with-a-bigger-screen-so-i-tried-this-mobile-controller-and-it-turned-my-ipad-into-a-gaming-powerhouse">I've always wanted a PlayStation Portal but with a bigger screen so I tried this mobile controller — and it turned my iPad into a gaming powerhouse</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple 50th Anniversary: Latest news, retrospectives and celebrations of thinking different ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tag/apple-50th-anniversary</link>
                                                                            <description>
                            <![CDATA[ Apple just turned 50, and we're covering this important anniversary with retrospectives, quizzes and going hands-on with Apple's biggest innovations of its past. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KE7KiXVUjrpEWzE2YddcJC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/s9nsKkZRADMoAaFjF7Y2uh-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Apr 2026 09:23:11 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Apr 2026 09:25:06 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/s9nsKkZRADMoAaFjF7Y2uh-1280-80.png">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Event]]></media:description>                                                            <media:text><![CDATA[Apple Event]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/s9nsKkZRADMoAaFjF7Y2uh-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's a very important year for Apple. As of April 1, the company has officially turned 50 — half a century of tech innovation and thinking different. And whether you're one of "the crazy ones" or someone who just appreciates great gadgets, chances are you've owned something built by the Cupertino crew at some point in your life.</p><p>And we're covering this moment with retrospectives into this company's fascinating history from being on the brink of bankruptcy to a $4 trillion empire. This includes a full timeline, unique insights into how you can see Apple define the future of phones and computing by looking back, and quizzes to test your knowledge.</p><h2 class="article-body__section" id="section-look-back-at-50-years-of-apple"><span>Look back at 50 years of Apple</span></h2><ul><li><a href="https://www.tomsguide.com/computing/the-50-moments-that-defined-apple">From near bankruptcy to a $4 trillion empire: The 51 moments that defined Apple</a></li><li><a href="https://www.tomsguide.com/tech/apple-50th-anniversary-quiz-how-well-do-you-remember-these-controversial-moments-and-tech-innovations">Apple 50th anniversary quiz: how well do you remember these controversial moments and tech innovations?</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-turns-50-why-these-deconstructed-vintage-iphones-are-the-ultimate-way-to-celebrate">Apple turns 50: Why these deconstructed vintage iPhones are the ultimate way to celebrate</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple 50th anniversary quiz: how well do you remember these controversial moments and tech innovations? ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/apple-50th-anniversary-quiz-how-well-do-you-remember-these-controversial-moments-and-tech-innovations</link>
                                                                            <description>
                            <![CDATA[ How much do you remember of Apple's half century of "thinking different" (and what have you erased from memory)? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LyZtLo3tnaeWfNCZRmz4B9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XDeUQyFu7Leiujz7gjdDH6-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Apr 2026 04:00:00 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Apr 2026 09:09:28 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ ella.taylor@futurenet.com (Ella Taylor) ]]></author>                    <dc:creator><![CDATA[ Ella Taylor ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/W2nC7HFA6avQHdFNFbFPNa.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ella is Tom’s Guide’s Engagement Editor, on a mission to get to know all about our readers, to help you with your burning questions, and to create an exciting mix of content that entices you to keep coming back to the site – whether you’re a regular reader or a &lt;a href=&quot;https://www.tomsguide.com/membership&quot;&gt;member&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;She has more than 15 years of editorial experience, graduating from Kingston University with a First Class Honours degree in Journalism in 2008. She has written for and edited magazines and websites, including fellow Future titles &lt;em&gt;TechRadar.com, CreativeBloq.com, Digital Camera magazine, NPhoto, BikeRadar.com, Mollie Makes&lt;/em&gt; and more. &lt;/p&gt;&lt;p&gt;Most recently, she was Managing Editor of &lt;em&gt;womanandhome.com&lt;/em&gt;, where she co-launched its &lt;a href=&quot;https://www.womanandhome.com/tag/quiz/&quot; target=&quot;_blank&quot;&gt;Quiz of the Day&lt;/a&gt; and led the charge for articles that actively asked readers for their views. Before that, she was Editor of professional photography website &lt;em&gt;canon-europe.com/pro&lt;/em&gt;, having worked her way up from Production Editor. As such, she&#039;s a stickler for fact-checking, has too many opinions about grammar and is easily excited by a beautiful photo.&lt;/p&gt;&lt;p&gt;A mum of two young children, she keeps fit by typically carrying at least one of them on her shoulders around the hilly streets of Bristol. When not chasing her sons around the play parks and soft plays of South West England and worshipping her three rescue cats, she&#039;s likely to be in the garden, steadily turning it from a neglected concrete jungle to a usable green space. She’s also finally embarking on a kitchen extension in May, so 2026 looks set to be a year of big home improvements and lots of builders’ tea.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/XDeUQyFu7Leiujz7gjdDH6-1280-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A split image showing Tim Cook and Alicia Keys at Apple&#039;s New York City celebrations for its 50th anniversary; and a shot of the &#039;50 years of thinking different&#039; logo and tagline at its London celebrations]]></media:description>                                                            <media:text><![CDATA[A split image showing Tim Cook and Alicia Keys at Apple&#039;s New York City celebrations for its 50th anniversary; and a shot of the &#039;50 years of thinking different&#039; logo and tagline at its London celebrations]]></media:text>
                                <media:title type="plain"><![CDATA[A split image showing Tim Cook and Alicia Keys at Apple&#039;s New York City celebrations for its 50th anniversary; and a shot of the &#039;50 years of thinking different&#039; logo and tagline at its London celebrations]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XDeUQyFu7Leiujz7gjdDH6-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Happy 50th birthday to Apple, a brand known for its iconic logo, its uncompromisingly beautiful products, and its commitment to innovation... as well as a fair number of flops and PR fails along the way! </p><p>In his post to mark the occasion, Tim Cook wrote, "At Apple, we’re more focused on building tomorrow than remembering yesterday." Well that may be, Tim. But as much as we're fans of the current crop of <a href="https://www.tomsguide.com/phones/iphones/i-spent-a-week-testing-the-iphone-17e-and-you-really-shouldnt-overlook-it">iPhone 17e</a>, and admire what the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a> offers its target audience, we can't celebrate a birthday in true style without looking back at some past favorites... and offering a little light-hearted ribbing over Apple's less successful moments as well! So sit back and enjoy this bumper Apple 50th anniversary multiple choice quiz.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OKQLZe"></div>                            </div>                            <script src="https://kwizly.com/embed/OKQLZe.js" async></script><p>How did you do? Too hard? Too easy? Let us know what you think in the comments below. And don't forget to register to save your score, reveal hints for any clues you're not sure of and secure your spot on the competitive Tom's Guide leaderboard.</p><p>I hope you enjoyed reminiscing about Apple products from the archives, pop culture moments you may have forgotten, tech moments that helped push the envelope, and controversies from over the years.</p><p>As Tim Cook wrote, "From the first Apple computer to the Mac, from iPod to iPhone, iPad to Apple Watch and AirPods, as well as the services we use every day — the App Store, Apple Music, Apple Pay, iCloud, and Apple TV — we’ve spent five decades rethinking what’s possible and putting powerful tools into people’s hands."</p><p>But as this quiz has shown, it hasn't all been smooth sailing. And in fact, there are plenty of Apple products you may have forgotten. We've captured some of them in the below crossword that you may enjoy, too!</p><div style="min-height: 1005px;">                                <div class="kwizly-quiz kwizly-WnAqye"></div>                            </div>                            <script src="https://kwizly.com/embed/WnAqye.js" async></script><a class="card card--standard card--rows-2 card--align-inline" href="https://www.tomsguide.com/play"><div class="card-image-widthsetter"><p class="vanilla-image-block"  style="padding-top:56.25%;"><img style="width: 100%" class="card__image" src="https://cdn.mos.cms.futurecdn.net/9dC8Z7BNysm3pR3EzeBqnX.jpg" alt="Screenshot of Tom's Guide puzzles and quizzes page"></p></div><div class="card__content"><h3 class="card__title">Tom's Guide games</h3><div class="card__description-wrapper"><div class="card__description"><p>Play multiple choice, lystery, word searches, crosswords and guess the number – can you reach the top of the leaderboard?</p></div></div></div></a><a class="card card--standard card--rows-2 card--align-inline" href="https://www.tomsguide.com/membership"><div class="card-image-widthsetter"><p class="vanilla-image-block"  style="padding-top:56.25%;"><img style="width: 100%" class="card__image" src="https://cdn.mos.cms.futurecdn.net/CtyBASsPQAuEKTsTEJu6YL.jpg" alt="A screenshot from the Tom's Guide website reading 'Everything you get as a member'"></p></div><div class="card__content"><h3 class="card__title">Tom's Guide Club</h3><div class="card__description-wrapper"><div class="card__description"><p>Join Tom’s Guide Club for free, to earn badges, talk to other members and Tom’s writers, get exclusive deals and more.</p></div></div></div></a><p>Keep your eye on the <a href="https://www.tomsguide.com/tag/apple">Apple section</a> of Tom's Guide this week, as we have a whole program of Apple-themed articles planned to mark the tech giant's milestone anniversary. From our <a href="https://www.tomsguide.com/news/live/apple-50th-anniversary">Apple live blog</a> to <a href="https://www.tomsguide.com/computing/the-50-moments-that-defined-apple">51 moments that defined Apple</a>, to asking <a href="https://www.tomsguide.com/computing/hardware/we-want-to-hear-from-you-what-was-your-first-ever-apple-device">what was the first Apple device you used</a>, there's plenty already live, and more to come.</p><p>And if you enjoyed this quiz, then please bookmark our <a href="https://www.tomsguide.com/tag/quiz">Quiz of the Day</a> section, where a new quiz or puzzle appears every weekday. </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/gaming/toms-guide-jigsaw-puzzles-hardest-difficulty-has-me-stumped">Can you beat us at our own game? New Tom’s Guide jigsaw puzzles are a great way to kill time between Wordles</a></li><li><a href="https://www.tomsguide.com/computing/apple-desktops/rip-cheese-grater-apple-has-officially-discontinued-the-mac-pro-but-i-wouldnt-buy-a-mac-studio-yet">RIP cheese grater: Apple has officially discontinued the Mac Pro but I wouldn't buy a Mac Studio yet</a></li><li><a href="https://www.tomsguide.com/gaming/forget-wordle-you-need-to-play-toms-guide-games-right-now">Forget Wordle, you need to play Tom's Guide games right now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon rolls out ultrafast 1-3 hour shipping: how to see if it's available in your area ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/amazon-rolls-out-ultrafast-1-3-hour-shipping-how-to-see-if-its-available-in-your-area</link>
                                                                            <description>
                            <![CDATA[ Amazon is rolling out 1-hour and 3-hour deliveries in parts of the U.S. Here's how to tell if its available where you are. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CgjcoMM9x5JXqkkZZTnGjL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XTtJRckzhCog3h3x3Mec25-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Mar 2026 20:06:45 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/XTtJRckzhCog3h3x3Mec25-1280-80.jpg">
                                                            <media:credit><![CDATA[Cineberg/Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[An Amazon delivery agent carrying an Amazon shipping box in Berlin, Germany, January 2020.]]></media:description>                                                            <media:text><![CDATA[An Amazon delivery agent carrying an Amazon shipping box in Berlin, Germany, January 2020.]]></media:text>
                                <media:title type="plain"><![CDATA[An Amazon delivery agent carrying an Amazon shipping box in Berlin, Germany, January 2020.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XTtJRckzhCog3h3x3Mec25-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Starting today (March 17), Amazon is rolling out one- and three-hour deliveries in certain regions and cities across the U.S. </p><p>The three-hour delivery is more widely available in 2,000 cities, according to Amazon. One hour is only available in a few hundred areas within that list. </p><p>“Our customers are busier than ever and are looking for new ways to save time while keeping their households running," Senior VP of Worldwide Operations Udit Madan said in a<a href="https://www.aboutamazon.com/news/retail/amazon-fast-delivery-orders" target="_blank"> press release</a>.  "We saw an opportunity to use our unique operational expertise and delivery network to help make customers’ lives a little easier while unlocking even more value for Prime members."</p><p>More than 90,000 products are eligible for the new delivery windows including pantry items, over-the-counter medications, toys and electronics.</p><p>There are fees for using the 1-hour and 3-hour delivery options. Prime members will pay $9.99 for a one-hour delivery and $4.99 for three-hour deliveries. If you don't have Prime then the fees go up by $10; $19.99 for 1-hour and $14.99 for three-hour.</p><h2 id="how-to-tell-if-its-available-in-your-area">How to tell if its available in your area</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="E5Y3diZwGxdsUZM3t2FvVK" name="Amazon deals.jpg" alt="Amazon deals" src="https://cdn.mos.cms.futurecdn.net/E5Y3diZwGxdsUZM3t2FvVK.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>In its statement, Amazon specified that 1-hour delivery is available in <strong>parts</strong> of several major metropolitan areas including  Los Angeles, Chicago, Oklahoma City, Nashville, Houston, and Washington, D.C., and smaller cities such as Des Moines, Iowa; Boise, Idaho; and American Fork, Utah. </p><p>Three-hour delivery is available in over 2,000 cities and towns. </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="Upkv9dKvVydGxdAJFi94Af" name="Gradient background" alt="Amazon 1-hour/3-hour delivery example" src="https://cdn.mos.cms.futurecdn.net/Upkv9dKvVydGxdAJFi94Af.png" 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>The company set up a new '<a href="https://www.amazon.com/fmc/ssd-storefront?speed=3hr" target="_blank">getitfast</a>' storefront where you can see if your area gets the deliveries.</p><p>As an example, I live in Los Angeles, but apparently, my area isn't eligible for 1-hour deliveries. You can see what's available in the upper taskbar underneath the Rufus AI button.</p><p>If you have the option you can filter eligible products by 1-hour or 3-hour availability. You can also use the search bar with new "in 1 hour" or "in 3 hours" search filters. </p><p>If you live in an eligible area, the new delivery windows are available now. However, it's not clear if and when Amazon will expand one-hour and three-hour deliveries to other areas.</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/entertainment/prime-video/amazon-prime-video-ad-free-tier-just-got-a-40-percent-price-hike-and-a-new-ultra-name">Amazon Prime Video ad-free tier just got a 40% price hike — and a new ‘Ultra’ name</a></li><li><a href="https://www.tomsguide.com/entertainment/streaming-devices/youre-wasting-your-fire-tv-sticks-potential-7-features-to-enable-right-now">You're wasting your Fire TV Stick's potential — 7 features to enable right now</a></li><li><a href="https://www.tomsguide.com/entertainment/prime-video/5-prime-video-action-movies-you-probably-havent-seen-march-2026">5 Prime Video action movies you (probably) haven't seen</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 'I’m heartbroken by the events in Minneapolis': how Tim Cook and other tech CEOs are responding to ICE ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/im-heartbroken-by-the-events-in-minneapolis-how-tim-cook-and-other-tech-ceos-are-responding-to-ice</link>
                                                                            <description>
                            <![CDATA[ Here's how tech leaders have responded to the ICE-related incidents in Minnesota. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">w3Poj2KhqrjtYrFwo6f8QH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MCkQwgCLKjbf4wcTKaYB9V-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 28 Jan 2026 19:18:59 +0000</pubDate>                                                                                                                                <updated>Wed, 28 Jan 2026 19:20:46 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ mike.prospero@futurenet.com (Mike Prospero) ]]></author>                    <dc:creator><![CDATA[ Mike Prospero ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/6ZM8mX4UwccqDJTh9gLPqV.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Michael A. Prospero is the U.S. Editor-in-Chief for Tom’s Guide. He oversees all evergreen content and oversees the Homes, Smart Home, and Fitness/Wearables categories for the site. In his spare time, he also tests out the latest drones, electric scooters, and smart home gadgets, such as video doorbells. Before his tenure at Tom&#039;s Guide, he was the Reviews Editor for Laptop Magazine, a reporter at Fast Company, the Times of Trenton, and, many eons back, an intern at George magazine. He received his undergraduate degree from Boston College, where he worked on the campus newspaper The Heights, and then attended the Columbia University school of Journalism. When he’s not testing out the latest running watch, electric scooter, or skiing or training for a marathon, he’s probably using the latest sous vide machine, smoker, or pizza oven, to the delight — or chagrin — of his family.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/MCkQwgCLKjbf4wcTKaYB9V-1280-80.jpg">
                                                            <media:credit><![CDATA[Credit: Tom’s Guide/David Paul Morris/Kyle Grillot/Bloomberg/Chance Yeh/Getty]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tim Cook, Cario Amodei, and Sam Altman]]></media:description>                                                            <media:text><![CDATA[Tim Cook, Cario Amodei, and Sam Altman]]></media:text>
                                <media:title type="plain"><![CDATA[Tim Cook, Cario Amodei, and Sam Altman]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MCkQwgCLKjbf4wcTKaYB9V-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In the wake of the unrest in Minneapolis following the shooting deaths of Alex Pretti and Renee Good by ICE agents, a few tech CEOs have begun to speak out about the Trump administration's policies, be it on social media or through internal communications with their employees. </p><p>While all of the statements have expressed dismay at the situation, most — such as the one from Apple CEO Tim Cook — have called for de-escalation, rather than condemning the actions of ICE outright. </p><h2 id="apple-s-tim-cook-this-is-a-time-for-deescalation">Apple's Tim Cook: 'This is a time for deescalation'</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:4000px;"><p class="vanilla-image-block" style="padding-top:66.55%;"><img id="4bTsKs6N8xC48NfmwntNCa" name="Tim Cook" alt="Tim Cook" src="https://cdn.mos.cms.futurecdn.net/4bTsKs6N8xC48NfmwntNCa.jpg" mos="" align="middle" fullscreen="" width="4000" height="2662" 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>On Tuesday (Jan. 27), Tim Cook, the CEO of Apple, issued a statement to employees saying he was "heartbroken" at the events unfolding in Minnesota, and called for a "deescalation." </p><p>"I’m heartbroken by the events in Minneapolis, and my prayers and deepest sympathies are with the families, with the communities, and with everyone that’s been affected.</p><p>"This is a time for deescalation. I believe America is strongest when we live up to our highest ideals, when we treat everyone with dignity and respect no matter who they are or where they’re from, and when we embrace our shared humanity. This is something Apple has always advocated for. I had a good conversation with the president this week where I shared my views, and I appreciate his openness to engaging on issues that matter to us all.</p><p>"I know this is very emotional and challenging for so many. I am proud of how deeply our teams care about the world beyond our walls. That empathy is one of Apple’s greatest strengths and it is something I believe we all cherish.</p><p>Thank you for all that you do."</p><p><a href="https://www.bloomberg.com/news/articles/2026-01-28/apple-s-cook-calls-for-deescalation-after-latest-ice-shooting?accessToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb3VyY2UiOiJTdWJzY3JpYmVyR2lmdGVkQXJ0aWNsZSIsImlhdCI6MTc2OTU2OTIxNSwiZXhwIjoxNzcwMTc0MDE1LCJhcnRpY2xlSWQiOiJUOUpZV1BLSUpIOEowMCIsImJjb25uZWN0SWQiOiI1RkQyNjU1NTA2QTI0NjM2QjM1NzBEQkQ5MTY1RkI1NCJ9.AqYevYR3E81ym5MYxexBcWWTTk4mdSixpCtAcOfWLOc&leadSource=uverify%20wall" target="_blank">Cook has faced criticism from employees after attending a private screening of "Melania"</a> at the White House, along with Andy Jassy from Amazon and Lisa Su from AMD, the evening that Pretti was killed. </p><h2 id="openai-s-sam-altman-what-s-happening-with-ice-is-going-too-far">OpenAI's Sam Altman: 'What’s happening with ICE is going too far'</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:4000px;"><p class="vanilla-image-block" style="padding-top:66.68%;"><img id="oT3Nq3B5iFTZdgGNDNarog" name="Sam Altman" alt="Sam Altman" src="https://cdn.mos.cms.futurecdn.net/oT3Nq3B5iFTZdgGNDNarog.jpg" mos="" align="middle" fullscreen="" width="4000" height="2667" 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>Earlier on Monday, OpenAI Sam Altman wrote to his employees on an internal Slack message that ICE has "gone too far," and vowed that his company would strive to "try to figure out how to actually do the right thing." </p><p>Here's the full text of his message, <a href="https://www.nytimes.com/2026/01/27/business/dealbook/altman-openai-minnesota.html" target="_blank">as reported by The New York Times</a>: </p><p>"I love the US and its values of democracy and freedom and will be supportive of the country however I can; OpenAI will too. But part of loving the country is the American duty to push back against overreach. What’s happening with ICE is going too far. There is a big difference between deporting violent criminals and what’s happening now, and we need to get the distinction right.</p><p>"President Trump is a very strong leader, and I hope he will rise to this moment and unite the country. I am encouraged by the last few hours of response and hope to see trust rebuilt with transparent investigations.</p><p>"As a company, we aim to stick to our convictions and not get blown around by changing fashions too much. We didn’t become super woke when that was popular, we didn’t start talking about masculine corporate energy when that was popular, and we are not going to make a lot of performative statements now about safety or politics or anything else. But we are going to continue to try to figure out how to actually do the right thing as best as we can, engage with leaders and push for our values, and speak up clearly about it as needed."</p><h2 id="anthropic-s-dario-amodi-the-horror-we-re-seeing">Anthropic's Dario Amodi: 'The horror we're seeing'</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:4564px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="GDtjRyUTkbbAUBs3kNRGY3" name="Dario Amodei" alt="Dario Amodei" src="https://cdn.mos.cms.futurecdn.net/GDtjRyUTkbbAUBs3kNRGY3.jpg" mos="" align="middle" fullscreen="" width="4564" height="3043" 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>Another executive to speak out was Anthropic's cofounder <a href="https://x.com/ch402/status/2015624212132905208?s=20" target="_blank">Chris Olah, who wrote on X</a> that "a federal agent killing an ICU nurse for seemingly no reason and with no provocation – shock the conscience." </p><p>Anthropic's CEO Dario Amodei also referenced <a href="https://x.com/DarioAmodei/status/2015833051205414955?s=20" target="_blank">"the horror we're seeing in Minnesota" on X</a>, before linking to an essay on the risks of AI to national security, economies, and democracy. </p><div class="see-more see-more--clipped"><blockquote class="twitter-tweet hawk-ignore" data-lang="en"><p lang="en" dir="ltr">I've been working on this essay for a while, and it is mainly about AI and about the future. But given the horror we're seeing in Minnesota, its emphasis on the importance of preserving democratic values and rights at home is particularly relevant.<a href="https://twitter.com/cantworkitout/status/2015833051205414955">January 26, 2026</a></p></blockquote><div class="see-more__filter"></div></div><h2 id="vinod-khosla-macho-ice-vigilantes-running-amuck">Vinod Khosla: "Macho ICE vigilantes running amuck"</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:3030px;"><p class="vanilla-image-block" style="padding-top:66.67%;"><img id="ETwhCokawBJ3NXwFQ2kenK" name="Vinod Khosla" alt="Vinod Khosla" src="https://cdn.mos.cms.futurecdn.net/ETwhCokawBJ3NXwFQ2kenK.jpg" mos="" align="middle" fullscreen="" width="3030" height="2020" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Steven Ferdman/Getty)</span></figcaption></figure><p>Vinod Khosla, the founder of venture capital firm Khosla Ventures, which has funded such companies as OpenAI, DoorDash, and Instacart, was one of the more vociferous voices, <a href="https://x.com/vkhosla/status/2015647215642186008" target="_blank">writing on X</a> that the video was "sickening to watch."</p><div class="see-more see-more--clipped"><blockquote class="twitter-tweet hawk-ignore" data-lang="en"><p lang="en" dir="ltr">I agree with @EthanChoi7 . Macho ICE vigilantes running amuck empowered by a conscious-less administration. The video was sickening to watch and the storytelling without facts or with invented fictitious facts by authorities almost unimaginable in a civilized society. ICE… https://t.co/ASvjZQB0Gg<a href="https://twitter.com/cantworkitout/status/2015647215642186008">January 26, 2026</a></p></blockquote><div class="see-more__filter"></div></div><h2 id="target-and-best-buy-weigh-in">Target and Best Buy weigh in</h2><p>On Sunday, the CEOs of 60 Minnesota-based companies, which include Target and Best Buy, <a href="https://www.mnchamber.com/blog/open-letter-more-60-ceos-minnesota-based-companies" target="_blank">issued an open letter</a>, calling for "an immediate deescalation of tensions and for state, local and federal officials to work together to find real solutions."</p><h2 id="an-open-letter-to-tech-ceos">An open letter to tech CEOs</h2><p>Cook and Altman are the rare exceptions among tech leaders to comment on the Trump administration's controversial tactics when it comes to deporting illegal immigrants. An <a href="https://iceout.tech/" target="_blank">open letter, signed by more than 800 employees</a> from companies such as Amazon, Google, Meta, and Microsoft, have urged their executives to condemn the administration's policies. </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/phones/iphones/succession-in-real-life-front-runner-at-apple-emerges-to-be-tim-cooks-replacement">Tim Cook could step down as Apple CEO as early as next year — and this is the front-runner to replace him</a></li><li><a href="https://www.tomsguide.com/news/live/meta-q4-earnings-live-jan-2026">Meta earnings live updates — stock down ahead of Q4 results, AI spending biggest worry</a></li><li><a href="https://www.tomsguide.com/news/live/microsoft-q2-earnings-2026">Microsoft Q2 earnings live — all the latest news as it happens</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 10 products Tom's Guide writers actually spent their own money on in 2025 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/10-products-toms-guide-writers-actually-spent-their-own-money-on-in-2025</link>
                                                                            <description>
                            <![CDATA[ We spent a lot of money on gadgets this year and these stand out as the best of the best. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">NWAE5LAvmQsZciUkorDnQR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/2BYRWHKYmYQfKC8iKoThZ3-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 04 Jan 2026 05:05:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ dave.leclair@futurenet.com (Dave LeClair) ]]></author>                    <dc:creator><![CDATA[ Dave LeClair ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/fyx7qYdxPMTNBhdnMfNmaB.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Senior News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/2BYRWHKYmYQfKC8iKoThZ3-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Products Tom&#039;s Guide writers bought in 2025]]></media:description>                                                            <media:text><![CDATA[Products Tom&#039;s Guide writers bought in 2025]]></media:text>
                                <media:title type="plain"><![CDATA[Products Tom&#039;s Guide writers bought in 2025]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/2BYRWHKYmYQfKC8iKoThZ3-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We test a lot of products at Tom's Guide. From full product reviews to hands-on opinion pieces, our staff is playing with new gadgets every day of the week. But with all the gadgets we review, sometimes something is so good that we need to run to the store (or an online store, more likely) and buy one for ourselves with our own hard-earned cash. </p><p>Lots of people think we get everything sent to us, but that's not always the case. A lot of the time, we have to buy devices to fill gaps in our lives, just like anyone else. And those are the products the Tom's Guide team is shouting out today.</p><h3 class="article-body__section" id="section-rove-r2-4k-dual-dash-cam-anthony-spadafora"><span>Rove R2-4K Dual dash cam — Anthony Spadafora</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:5700px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="t4JT4XzG4TSvW2JUopUeTg" name="Rove 2K-4K Dash Cam" alt="The Rove 2K-4K Dual installed in a truck with the cables for it and the rear camera cleanly tucked away" src="https://cdn.mos.cms.futurecdn.net/t4JT4XzG4TSvW2JUopUeTg.jpg" mos="" align="middle" fullscreen="" width="5700" height="3206" 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>Our first product comes from our Managing Editor, Security and Home Office, Anthony Spadafora. He purchased a new car and wanted a way to protect it. A Rove R2-4K Dual dash camera turned out to be the perfect purchase. </p><p>Why did he buy it? He said, "Knowing that every time I turn on my engine I have both front and rear video recording in real time gives me tremendous peace of mind."</p><p><strong></strong><a href="https://www.tomsguide.com/vehicle-tech/i-just-got-a-new-car-and-a-dash-cam-was-the-first-and-hardest-accessory-i-installed"><strong>Read Anthony's full Rove R2-4K Dual thoughts</strong></a><strong>.</strong></p><div class="product"><a data-dimension112="3e4745ee-8e2c-4b00-8a3b-ba0b262d02fa" data-action="Deal Block" data-label="If you're looking for a cheap 4K dash cam with a rear view thrown in, then Rove's R2-4K dual is a solid option. it struggles with night vision but for the most part it's a easy-to-use dash cam that offers clear video throughout the day. Plus, you get a 128GB microSD card thrown in." data-dimension48="If you're looking for a cheap 4K dash cam with a rear view thrown in, then Rove's R2-4K dual is a solid option. it struggles with night vision but for the most part it's a easy-to-use dash cam that offers clear video throughout the day. Plus, you get a 128GB microSD card thrown in." data-dimension25="$129" href="https://www.amazon.com/ROVE-R2-4K-DUAL-STARVIS-Included/dp/B0D6J5B98H" 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="W4BnM3H5ffmH2YykyTUrhi" name="rove r2-4k dash cam" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/W4BnM3H5ffmH2YykyTUrhi.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're looking for a cheap 4K dash cam with a rear view thrown in, then Rove's R2-4K dual is a solid option. it struggles with night vision but for the most part it's a easy-to-use dash cam that offers clear video throughout the day. Plus, you get a 128GB microSD card thrown in.<a class="view-deal button" href="https://www.amazon.com/ROVE-R2-4K-DUAL-STARVIS-Included/dp/B0D6J5B98H" target="_blank" rel="nofollow" data-dimension112="3e4745ee-8e2c-4b00-8a3b-ba0b262d02fa" data-action="Deal Block" data-label="If you're looking for a cheap 4K dash cam with a rear view thrown in, then Rove's R2-4K dual is a solid option. it struggles with night vision but for the most part it's a easy-to-use dash cam that offers clear video throughout the day. Plus, you get a 128GB microSD card thrown in." data-dimension48="If you're looking for a cheap 4K dash cam with a rear view thrown in, then Rove's R2-4K dual is a solid option. it struggles with night vision but for the most part it's a easy-to-use dash cam that offers clear video throughout the day. Plus, you get a 128GB microSD card thrown in." data-dimension25="$129">View Deal</a></p></div><h3 class="article-body__section" id="section-gamesir-g8-plus-jeff-parsons"><span>GameSir G8 Plus — Jeff Parsons</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:4096px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="f3JpaL7J8x4Z6JW4G9NwcP" name="GameSir G8 Plus (1)" alt="Gamesir G8 Plus mobile controller" src="https://cdn.mos.cms.futurecdn.net/f3JpaL7J8x4Z6JW4G9NwcP.jpg" mos="" align="middle" fullscreen="" width="4096" height="2304" 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>Our U.K. Editor in Chief, Jeff Parsons, spent his cash on a GameSir G8 Plus, and he's very happy with it. </p><p>"In a world where costs are constantly increasing, it's refreshing to come across a product that actually seems reasonably priced," he said in his detailed breakdown on why he loves it.</p><p><a href="https://www.tomsguide.com/gaming/gaming-peripherals/i-test-gadgets-for-a-living-and-this-mobile-gaming-controller-is-so-good-i-bought-one-with-my-own-money"><strong>Read Jeff's full GameSir G8 Plus thoughts. </strong></a></p><div class="product"><a data-dimension112="4a9370eb-b8f1-4e3d-9f54-32558e4613ba" data-action="Deal Block" data-label="The GameSir G8 Plus is a fantastic phone controller. Thanks to Bluetooth connectivity, it’s compatible with Android and iOS smartphones, tablets and the Nintendo Switch lineup, enabling you to play all your favorite games on the go. Its Hall Effect thumbsticks and triggers are responsive, and the controller’s ergonomic design ensures all-day comfort." data-dimension48="The GameSir G8 Plus is a fantastic phone controller. Thanks to Bluetooth connectivity, it’s compatible with Android and iOS smartphones, tablets and the Nintendo Switch lineup, enabling you to play all your favorite games on the go. Its Hall Effect thumbsticks and triggers are responsive, and the controller’s ergonomic design ensures all-day comfort." data-dimension25="$63" href="https://www.amazon.com/dp/B0FT34CLXF" 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:56.25%;"><img id="GpcD9nrAhVFWvfLf49RgUX" name="gamesir-g8-plus.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GpcD9nrAhVFWvfLf49RgUX.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The GameSir G8 Plus is a fantastic phone controller. Thanks to Bluetooth connectivity, it’s compatible with Android and iOS smartphones, tablets and the Nintendo Switch lineup, enabling you to play all your favorite games on the go. Its Hall Effect thumbsticks and triggers are responsive, and the controller’s ergonomic design ensures all-day comfort.<a class="view-deal button" href="https://www.amazon.com/dp/B0FT34CLXF" target="_blank" rel="nofollow" data-dimension112="4a9370eb-b8f1-4e3d-9f54-32558e4613ba" data-action="Deal Block" data-label="The GameSir G8 Plus is a fantastic phone controller. Thanks to Bluetooth connectivity, it’s compatible with Android and iOS smartphones, tablets and the Nintendo Switch lineup, enabling you to play all your favorite games on the go. Its Hall Effect thumbsticks and triggers are responsive, and the controller’s ergonomic design ensures all-day comfort." data-dimension48="The GameSir G8 Plus is a fantastic phone controller. Thanks to Bluetooth connectivity, it’s compatible with Android and iOS smartphones, tablets and the Nintendo Switch lineup, enabling you to play all your favorite games on the go. Its Hall Effect thumbsticks and triggers are responsive, and the controller’s ergonomic design ensures all-day comfort." data-dimension25="$63">View Deal</a></p></div><h3 class="article-body__section" id="section-fujifilm-x-e5-ashley-thieme"><span>Fujifilm X-E5 — Ashley Thieme</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:3374px;"><p class="vanilla-image-block" style="padding-top:66.69%;"><img id="e5wccHrPKuCLXF2DWRiwPN" name="Fujifilm X-E5" alt="Hand holding the new Fujifilm X-E5 film simulation camera." src="https://cdn.mos.cms.futurecdn.net/e5wccHrPKuCLXF2DWRiwPN.jpg" mos="" align="middle" fullscreen="" width="3374" height="2250" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Ashley Thieme)</span></figcaption></figure><p>"I usually like to take pictures of nature, whether I’m at a lake, beach or in the woods, it’s a great way to connect with my surroundings. I’ve been shooting mostly on the Sony a6100 for the last couple of years, but in June, I had the opportunity to head out to Valencia with Fujifilm to test out their then-new camera, the Fujifilm X-E5, which I think is one of the best mirrorless cameras around," said Ashley Thieme, Staff writer, Reviews. </p><p>She liked it so much that she went out and bought one after the event. "There is nothing difficult about this camera. Everything runs smoothly, and there is very little room for error," Thieme continued.</p><p><a href="https://www.tomsguide.com/cameras-photography/the-fujifilm-x-e5-puts-the-fun-back-into-photography-heres-why-its-my-favorite-purchase-this-year"><strong>Read Ashley's full Fujifilm X-E5 thoughts. </strong></a></p><div class="product"><a data-dimension112="17744e43-2742-4c48-9b3f-c0b98fbec678" data-action="Deal Block" data-label="The Fujifilm X-E5 is the resurrection of the X-E series and successor to the Fujifilm X-E4. It’s a 40.2 MP camera with an interchangeable lens. It is incredibly easy to use but produces incredibly satisfying results that’ll please seasoned photographers." data-dimension48="The Fujifilm X-E5 is the resurrection of the X-E series and successor to the Fujifilm X-E4. It’s a 40.2 MP camera with an interchangeable lens. It is incredibly easy to use but produces incredibly satisfying results that’ll please seasoned photographers." data-dimension25="$1899" href="https://www.amazon.com/FUJIFILM-Mirrorless-Digital-Camera-XF23mmF2-8/dp/B0FBYR3KV2" 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:55.07%;"><img id="KvY2Q2ScCe7XrCxWDXWD7R" name="fujifilm-xe5-mirrorless-digital-camera-x-2a65e738-0008-41a0-8fc4-a27da7f880b3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KvY2Q2ScCe7XrCxWDXWD7R.jpg" mos="" align="middle" fullscreen="" width="1500" height="826" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fujifilm X-E5 is the resurrection of the X-E series and successor to the Fujifilm X-E4. It’s a 40.2 MP camera with an interchangeable lens. It is incredibly easy to use but produces incredibly satisfying results that’ll please seasoned photographers.<a class="view-deal button" href="https://www.amazon.com/FUJIFILM-Mirrorless-Digital-Camera-XF23mmF2-8/dp/B0FBYR3KV2" target="_blank" rel="nofollow" data-dimension112="17744e43-2742-4c48-9b3f-c0b98fbec678" data-action="Deal Block" data-label="The Fujifilm X-E5 is the resurrection of the X-E series and successor to the Fujifilm X-E4. It’s a 40.2 MP camera with an interchangeable lens. It is incredibly easy to use but produces incredibly satisfying results that’ll please seasoned photographers." data-dimension48="The Fujifilm X-E5 is the resurrection of the X-E series and successor to the Fujifilm X-E4. It’s a 40.2 MP camera with an interchangeable lens. It is incredibly easy to use but produces incredibly satisfying results that’ll please seasoned photographers." data-dimension25="$1899">View Deal</a></p></div><h3 class="article-body__section" id="section-airpods-pro-2-dan-bracaglia"><span>AirPods Pro 2 — Dan Bracaglia</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:4079px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="5huAzdJrxaGMhhB7J4c87C" name="AirPods Pro 2 (3).jpg" alt="Apple AirPods Pro 2" src="https://cdn.mos.cms.futurecdn.net/5huAzdJrxaGMhhB7J4c87C.jpg" mos="" align="middle" fullscreen="" width="4079" height="2295" 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>Senior Writer, Fitness & Wearables, didn't purchase a newly released product this year; instead, he opted for a pair of AirPods Pro 2. </p><p>"Was I a fool for not ponying up the cash for the latest model? No, I ultimately decided, after reading Erin’s equally sound rationale for sticking with the <a href="https://www.tomsguide.com/audio/airpods/i-love-my-airpods-pro-2-but-i-wont-be-buying-the-airpods-pro-3-heres-why">AirPods Pro 2 over the AirPods Pro 3</a>," Dan explained.</p><p><a href="https://www.tomsguide.com/wellness/smartwatches/the-best-thing-i-bought-in-2025-is-the-airpods-pro-2-from-2022-heres-why"><strong>Read Dan's full AirPods Pro 2 thoughts.</strong></a></p><div class="product"><a data-dimension112="86f23c56-d97c-43cd-975c-c158c0844fe7" data-action="Deal Block" data-label="The AirPods Pro 2 let you save money and enjoy solid ANC, all the best Apple audio updates, spatial audio, alongside good quality sound and seamless Apple device pairing without spending tons of money on the AirPods Pro 3." data-dimension48="The AirPods Pro 2 let you save money and enjoy solid ANC, all the best Apple audio updates, spatial audio, alongside good quality sound and seamless Apple device pairing without spending tons of money on the AirPods Pro 3." data-dimension25="$199" href="https://www.amazon.com/Apple-Cancellation-Transparency-Personalized-High-Fidelity/dp/B0D1XD1ZV3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1509px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="qKLKJjzB34MJxU93cKcHRB" name="1699012667.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/qKLKJjzB34MJxU93cKcHRB.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 2 let you save money and enjoy solid ANC, all the best Apple audio updates, spatial audio, alongside good quality sound and seamless Apple device pairing without spending tons of money on the AirPods Pro 3.<a class="view-deal button" href="https://www.amazon.com/Apple-Cancellation-Transparency-Personalized-High-Fidelity/dp/B0D1XD1ZV3" target="_blank" rel="nofollow" data-dimension112="86f23c56-d97c-43cd-975c-c158c0844fe7" data-action="Deal Block" data-label="The AirPods Pro 2 let you save money and enjoy solid ANC, all the best Apple audio updates, spatial audio, alongside good quality sound and seamless Apple device pairing without spending tons of money on the AirPods Pro 3." data-dimension48="The AirPods Pro 2 let you save money and enjoy solid ANC, all the best Apple audio updates, spatial audio, alongside good quality sound and seamless Apple device pairing without spending tons of money on the AirPods Pro 3." data-dimension25="$199">View Deal</a></p></div><h3 class="article-body__section" id="section-fujifilm-x-t50-nikita-achanta"><span>Fujifilm X-T50 — Nikita Achanta</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="8VmcabWyYxeyMX9xGmcgkH" name="Fujifilm_XT50_01.JPG" alt="A Fujifilm X-T50 camera in the charcoal grey colorway" src="https://cdn.mos.cms.futurecdn.net/8VmcabWyYxeyMX9xGmcgkH.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>"When I first held it in my hands, all the way back in May 2024, I thought it was a lovely, compact, premium camera that took incredible photos. Fast forward a whole year to me adding it to my cart and paying for it myself," said Nikita Achanta, Senior Writer, Reviews. </p><p>"I wouldn't change a thing about the Fujifilm X-T50."</p><p><a href="https://www.tomsguide.com/cameras-photography/mirrorless-cameras/best-thing-i-bought-this-year-fujifilm-x-t-50"><strong>Read Nikita's full Fujifilm X-T50 thoughts.</strong></a></p><div class="product"><a data-dimension112="f6a23ab1-9ac2-49e6-9c31-b3642b18a2ca" data-action="Deal Block" data-label="Fujifilm X-T50" data-dimension48="Fujifilm X-T50" data-dimension25="$1599" href="https://www.amazon.com/Fujifilm-Mirrorless-Digital-Camera-XC15-45mmF3-5-5-6/dp/B0D3X6N68G/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:78.01%;"><img id="HbwuHEixisNVZfUN754aZi" name="X-T50 deal body" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HbwuHEixisNVZfUN754aZi.png" mos="" align="middle" fullscreen="" width="1264" height="986" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/cameras-photography/fujifilm-x-t50-review" data-dimension112="f6a23ab1-9ac2-49e6-9c31-b3642b18a2ca" data-action="Deal Block" data-label="Fujifilm X-T50" data-dimension48="Fujifilm X-T50" data-dimension25="$1599">Fujifilm X-T50</a> succeeds and improves on the X-T30 II, and it packs a punch with a huge 40.2MP sensor, excellent in-body image stabilization and reliable autofocus. Its biggest selling point is the new film simulation dial for maximum creativity.<a class="view-deal button" href="https://www.amazon.com/Fujifilm-Mirrorless-Digital-Camera-XC15-45mmF3-5-5-6/dp/B0D3X6N68G/" target="_blank" rel="nofollow" data-dimension112="f6a23ab1-9ac2-49e6-9c31-b3642b18a2ca" data-action="Deal Block" data-label="Fujifilm X-T50" data-dimension48="Fujifilm X-T50" data-dimension25="$1599">View Deal</a></p></div><h3 class="article-body__section" id="section-wireless-carplay-adapter-dave-leclair"><span>Wireless CarPlay adapter — Dave LeClair</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:2016px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ADG2WsfKbWr3mQX72hbsRb" name="IMG_0430" alt="CarPlay Adapter in hand" src="https://cdn.mos.cms.futurecdn.net/ADG2WsfKbWr3mQX72hbsRb.jpg" mos="" align="middle" fullscreen="" width="2016" height="1134" 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 is the product I bought this year and I couldn't be happier with my decision. Could I just have used a USB-C cable instead? Sure, but where's the fun in that?</p><p>"Most importantly, it works flawlessly. It never disconnects. My phone always connects in seconds. Delay is the lowest I've ever experienced with a wireless CarPlay device. It's just a solid little device that does exactly what it promises," I wrote in my piece explaining why I like this device.</p><p><a href="https://www.tomsguide.com/vehicle-tech/i-finally-bought-a-wireless-carplay-adapter-that-works-and-its-worth-every-penny"><strong>Read Dave's Wireless CarPlay Adapter thoughts.</strong></a></p><div class="product"><a data-dimension112="df35b943-5503-4a50-96de-7971a0782906" data-action="Deal Block" data-label="If you're in the market for a stable wireless CarPlay adapter, look no further. You plug the tiny dongle into your car's USB port, connect and enjoy everything CarPlay offers without wires. It's my favorite thing I purchased in 2025 — I use it every day, it works as advertised, and it makes my life more convenient, which is all I can really ask for." data-dimension48="If you're in the market for a stable wireless CarPlay adapter, look no further. You plug the tiny dongle into your car's USB port, connect and enjoy everything CarPlay offers without wires. It's my favorite thing I purchased in 2025 — I use it every day, it works as advertised, and it makes my life more convenient, which is all I can really ask for." data-dimension25="$29" href="https://www.amazon.com/dp/B0FCSB255T" 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:99.33%;"><img id="uW2JjsGH6hTAwTfHmuEgYg" name="1766516511.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uW2JjsGH6hTAwTfHmuEgYg.jpg" mos="" align="middle" fullscreen="" width="1500" height="1490" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If you're in the market for a stable wireless CarPlay adapter, look no further. You plug the tiny dongle into your car's USB port, connect and enjoy everything CarPlay offers without wires. It's my favorite thing I purchased in 2025 — I use it every day, it works as advertised, and it makes my life more convenient, which is all I can really ask for.<a class="view-deal button" href="https://www.amazon.com/dp/B0FCSB255T" target="_blank" rel="nofollow" data-dimension112="df35b943-5503-4a50-96de-7971a0782906" data-action="Deal Block" data-label="If you're in the market for a stable wireless CarPlay adapter, look no further. You plug the tiny dongle into your car's USB port, connect and enjoy everything CarPlay offers without wires. It's my favorite thing I purchased in 2025 — I use it every day, it works as advertised, and it makes my life more convenient, which is all I can really ask for." data-dimension48="If you're in the market for a stable wireless CarPlay adapter, look no further. You plug the tiny dongle into your car's USB port, connect and enjoy everything CarPlay offers without wires. It's my favorite thing I purchased in 2025 — I use it every day, it works as advertised, and it makes my life more convenient, which is all I can really ask for." data-dimension25="$29">View Deal</a></p></div><h3 class="article-body__section" id="section-ugreen-dxp4800-plus-ryan-epps"><span>Ugreen DXP4800 Plus — Ryan Epps</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="9JavYnYi5GWyCwitiNVJ9L" name="UGREEN NASync DXP4800 Plus" alt="UGREEN NASync DXP4800 Plus" src="https://cdn.mos.cms.futurecdn.net/9JavYnYi5GWyCwitiNVJ9L.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>"The DXP4800 Plus has proven to be a total lifesaver for uploading and saving all my iPhone photos and videos, as well as handling runoff content for my video editing workflows," Staff Writer Ryan Epps wrote. </p><p>"Plus, it’s become a substitute for Netflix and Hulu, allowing me access to my favorite anime, with subtitles to boot," he continued.</p><p><a href="https://www.tomsguide.com/computing/the-coolest-piece-of-tech-i-bought-all-year-was-the-dxp4800-plus-heres-why-its-a-game-changer"><strong>Read Ryan's Ugreen DXP4800 Plus thoughts.</strong></a></p><div class="product"><a data-dimension112="6e348a47-412f-4359-b136-3f5ba2405918" data-action="Deal Block" data-label="A NAS is basically a whole virtual computer you can access from anywhere, and this has enough internal horsepower to load content quickly and effectively for streaming — Intel Pentium Gold 8505 CPU, 8GB DDR5 RAM and support for up to 136TB of storage." data-dimension48="A NAS is basically a whole virtual computer you can access from anywhere, and this has enough internal horsepower to load content quickly and effectively for streaming — Intel Pentium Gold 8505 CPU, 8GB DDR5 RAM and support for up to 136TB of storage." data-dimension25="$594" href="https://www.amazon.com/UGREEN-DXP4800-Plus-Attached-Diskless/dp/B0D22JRHZB" 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:58.53%;"><img id="PTLbU5wTyoyqS6DXLkNzQX" name="UGREEN NASync DXP4800" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PTLbU5wTyoyqS6DXLkNzQX.jpg" mos="" align="middle" fullscreen="" width="1500" height="878" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>A NAS is basically a whole virtual computer you can access from anywhere, and this has enough internal horsepower to load content quickly and effectively for streaming — Intel Pentium Gold 8505 CPU, 8GB DDR5 RAM and support for up to 136TB of storage.<a class="view-deal button" href="https://www.amazon.com/UGREEN-DXP4800-Plus-Attached-Diskless/dp/B0D22JRHZB" target="_blank" rel="nofollow" data-dimension112="6e348a47-412f-4359-b136-3f5ba2405918" data-action="Deal Block" data-label="A NAS is basically a whole virtual computer you can access from anywhere, and this has enough internal horsepower to load content quickly and effectively for streaming — Intel Pentium Gold 8505 CPU, 8GB DDR5 RAM and support for up to 136TB of storage." data-dimension48="A NAS is basically a whole virtual computer you can access from anywhere, and this has enough internal horsepower to load content quickly and effectively for streaming — Intel Pentium Gold 8505 CPU, 8GB DDR5 RAM and support for up to 136TB of storage." data-dimension25="$594">View Deal</a></p></div><h3 class="article-body__section" id="section-mayflash-f700-elite-tony-polanco"><span>Mayflash F700 Elite — Tony Polanco </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="9niRG3FCpXSzRQF7Yq7fsm" name="Mayflash F700 Elite-01" alt="Mayflash F700 Elite" src="https://cdn.mos.cms.futurecdn.net/9niRG3FCpXSzRQF7Yq7fsm.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Tony Polanco, Senior Computing Writer, went out and purchased a fight stick, which furthered his love of fighting games.</p><p>"Whether you’re an arcade stick master or novice, the Mayflash F700 Elite is worth checking out for all it provides. Here’s why it’s my favorite product I purchased myself in 2025," Polanco wrote.</p><p><a href="https://www.tomsguide.com/gaming/gaming-peripherals/im-a-fighting-game-fan-and-this-arcade-stick-was-my-favorite-purchase-of-the-year"><strong>Read Tony's full Mayflash F700 Elite thoughts</strong></a><strong>.</strong></p><div class="product"><a data-dimension112="0e3e2af4-82fc-4024-969f-8805bc13e4c8" data-action="Deal Block" data-label="The Mayflash F700 Elite is an excellent choice for those looking for an overall solid arcade stick. It packs genuine Sanwa parts, is compatible with multiple platforms, and supports Bluetooth, 2.4 GHz, and wired connectivity. You can also customize it with different parts and even add your own artwork. If you're new to arcade sticks, this is an excellent option." data-dimension48="The Mayflash F700 Elite is an excellent choice for those looking for an overall solid arcade stick. It packs genuine Sanwa parts, is compatible with multiple platforms, and supports Bluetooth, 2.4 GHz, and wired connectivity. You can also customize it with different parts and even add your own artwork. If you're new to arcade sticks, this is an excellent option." data-dimension25="$179" href="https://www.amazon.com/MAYFLASH-joystick-Fighting-Bluetooth-Connection-PlayStation/dp/B0D9B6NGPM" 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="uLjHYCypQvLqUqE42chATX" name="MAYFLASH Arcade Stick F700" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uLjHYCypQvLqUqE42chATX.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Mayflash F700 Elite is an excellent choice for those looking for an overall solid arcade stick. It packs genuine Sanwa parts, is compatible with multiple platforms, and supports Bluetooth, 2.4 GHz, and wired connectivity. You can also customize it with different parts and even add your own artwork. If you're new to arcade sticks, this is an excellent option.<a class="view-deal button" href="https://www.amazon.com/MAYFLASH-joystick-Fighting-Bluetooth-Connection-PlayStation/dp/B0D9B6NGPM" target="_blank" rel="nofollow" data-dimension112="0e3e2af4-82fc-4024-969f-8805bc13e4c8" data-action="Deal Block" data-label="The Mayflash F700 Elite is an excellent choice for those looking for an overall solid arcade stick. It packs genuine Sanwa parts, is compatible with multiple platforms, and supports Bluetooth, 2.4 GHz, and wired connectivity. You can also customize it with different parts and even add your own artwork. If you're new to arcade sticks, this is an excellent option." data-dimension48="The Mayflash F700 Elite is an excellent choice for those looking for an overall solid arcade stick. It packs genuine Sanwa parts, is compatible with multiple platforms, and supports Bluetooth, 2.4 GHz, and wired connectivity. You can also customize it with different parts and even add your own artwork. If you're new to arcade sticks, this is an excellent option." data-dimension25="$179">View Deal</a></p></div><h3 class="article-body__section" id="section-miro-v99-powerbank-john-velasco"><span>Miro V99 powerbank — John Velasco </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="PA5KinMMPDYua7ziYVuckA" name="MIRO V99 Power Bank Gaming Console" alt="MIRO V99 Power Bank Gaming Console." src="https://cdn.mos.cms.futurecdn.net/PA5KinMMPDYua7ziYVuckA.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>John Velasco, Senior Channel Editor for Phones, found a perfect way to spend his hard-earned money on something that's both practical and fun. He got the Miro V99 Power Bank that lets you play classic games while charging your phone.</p><p>"I’ve tested many of the best portable chargers around, but the Miro V99 is truly in a class of its own, in part due to how it also doubles as a gaming console," John wrote.</p><p><a href="https://www.tomsguide.com/phones/i-bought-this-magsafe-power-bank-to-charge-my-iphone-anywhere-and-it-doubles-as-a-retro-gaming-handheld"><strong>Read John's full Miro V99 Power Bank thoughts.</strong></a></p><div class="product"><a data-dimension112="3e3e1d22-70c1-4ce8-9223-8b52b9071990" data-action="Deal Block" data-label="Price check: $40 @ Walmart" data-dimension48="Price check: $40 @ Walmart" data-dimension25="$39" href="https://www.newegg.com/black-miro-v99-5000-mah-power-bank/p/39G-01GM-00009" 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:100.00%;"><img id="LkBKSWzvvbhG3qdgCt9qaW" name="MIRO V99 Power Bank Gaming Console deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LkBKSWzvvbhG3qdgCt9qaW.png" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Miro V99 packs a 5,000 mAh battery to charge your gadgets while on the go, but it also doubles as a retro gaming handheld complete with controls and a display. It features 15W wireless charging and faster 20W wired speeds.<br><strong>Price check: </strong><a href="https://www.walmart.com/ip/MIRO-V99-3-in-1-Magnetic-Wireless-Charger-5000mAh-Multifunctional-Power-Bank-Gaming-Console-15W-MegSafe-20W-PD-Fast-Charge/17272964574" target="_blank" rel="nofollow" data-dimension112="3e3e1d22-70c1-4ce8-9223-8b52b9071990" data-action="Deal Block" data-label="Price check: $40 @ Walmart" data-dimension48="Price check: $40 @ Walmart" data-dimension25="$39"><strong>$40 @ Walmart</strong></a><a class="view-deal button" href="https://www.newegg.com/black-miro-v99-5000-mah-power-bank/p/39G-01GM-00009" target="_blank" rel="nofollow" data-dimension112="3e3e1d22-70c1-4ce8-9223-8b52b9071990" data-action="Deal Block" data-label="Price check: $40 @ Walmart" data-dimension48="Price check: $40 @ Walmart" data-dimension25="$39">View Deal</a></p></div><h3 class="article-body__section" id="section-nintendo-switch-2-scott-younker"><span>Nintendo Switch 2 — Scott Younker</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="Juxvb6aK7PUJQmtiEwnCeb" name="Nintendo-Switch-2-SFII" alt="The Nintendo Switch 2 propped up on a kitchen table" src="https://cdn.mos.cms.futurecdn.net/Juxvb6aK7PUJQmtiEwnCeb.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: Stephen Lambrechts / Tom's Guide)</span></figcaption></figure><p>"This year, one of the few big and best purchases I made was the new Nintendo Switch 2. I’ve had a ton of fun playing original Nintendo games and new third-party titles on it for the last six months," wrote Scott Younker, West Coast Reporter for Tom's Guide, on his decision to buy Nintendo's latest console.</p><p>"I can honestly say that the Switch 2 is tons of fun and one of my favorite things I bought this year," Scott continued.</p><p><a href="https://www.tomsguide.com/gaming/nintendo/best-thing-i-bought-this-year-was-the-nintendo-switch-2-and-its-not-even-close"><strong>Read Scott's full Nintendo Switch 2 thoughts.</strong></a></p><div class="product"><a data-dimension112="1ac3a7d9-3282-4e36-8f1b-27a6f83f79b0" data-action="Deal Block" data-label="Price check: Amazon @ $449.99" data-dimension48="Price check: Amazon @ $449.99" data-dimension25="$449" href="https://www.nintendo.com/us/store/products/nintendo-switch-2-system-123669/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1752px;"><p class="vanilla-image-block" style="padding-top:79.11%;"><img id="cigqecPPNSzjwC5k4JMrQ9" name="Nintendo Switch 2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cigqecPPNSzjwC5k4JMrQ9.png" mos="" align="middle" fullscreen="" width="1752" height="1386" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With bundles possibly going away and prices expected to rise next year, the standalone console could be your best deal right now. It comes with the Switch 2, a set of Joy-Con 2 controllers, a TV dock and a controller holder for the Joy-Cons. <br><strong>Price check: </strong><a href="https://www.amazon.com/Nintendo-Switch-2-System/dp/B0F3GWXLTS?th=1" target="_blank" rel="nofollow" data-dimension112="1ac3a7d9-3282-4e36-8f1b-27a6f83f79b0" data-action="Deal Block" data-label="Price check: Amazon @ $449.99" data-dimension48="Price check: Amazon @ $449.99" data-dimension25="$449"><strong>Amazon @ $449.99</strong></a><strong>, </strong><a href="https://www.bestbuy.com/product/switch-2-system-nintendo-switch-2/J7GSL57TGH" target="_blank" rel="nofollow"><strong>Best Buy @ $449.99</strong></a><strong>, </strong><a href="" target="_blank" rel="nofollow"><strong>Target @ $449.99</strong></a><strong>, </strong><a href="https://www.walmart.com/ip/Nintendo-Switch-2-System/15949610846" target="_blank" rel="nofollow"><strong>$449 @ Walmart</strong></a><a class="view-deal button" href="https://www.nintendo.com/us/store/products/nintendo-switch-2-system-123669/" target="_blank" rel="nofollow" data-dimension112="1ac3a7d9-3282-4e36-8f1b-27a6f83f79b0" data-action="Deal Block" data-label="Price check: Amazon @ $449.99" data-dimension48="Price check: Amazon @ $449.99" data-dimension25="$449">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 5 new Apple products for 2026 that will change everything — iPhone Fold, cheap MacBook, Apple glasses and more  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/apple-in-2026</link>
                                                                            <description>
                            <![CDATA[ From the first foldable iPhone and a cheap MacBook to (maybe) smart glasses, this is a pivotal moment for Apple. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">ukmAvSwci2Ytu4HfBbUCX4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sxufdZWni2zbu9Br9XSsef-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 30 Dec 2025 05:15:00 +0000</pubDate>                                                                                                                                <updated>Tue, 30 Dec 2025 17:14:19 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                    <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[Smart Home]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Apple Intelligence]]></category>
                                                    <category><![CDATA[Smart Glasses]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Home]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[AI]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/sxufdZWni2zbu9Br9XSsef-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide/Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Render of Apple Glasses, HomePod with touchscreen, Siri icon, Tim Cook, MacBook Air and render of a folding iPhone.]]></media:description>                                                            <media:text><![CDATA[Render of Apple Glasses, HomePod with touchscreen, Siri icon, Tim Cook, MacBook Air and render of a folding iPhone.]]></media:text>
                                <media:title type="plain"><![CDATA[Render of Apple Glasses, HomePod with touchscreen, Siri icon, Tim Cook, MacBook Air and render of a folding iPhone.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sxufdZWni2zbu9Br9XSsef-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is riding pretty high as 2025 comes to a close. The new <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a> lineup has been a huge hit so far — with the exception of the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air</a> — as CEO Tim Cook has described iPhone demand as “off the chart.” Apple is so confident that it’s forecasting its best December quarter ever, too.</p><p>There’s plenty of other reasons to be optimistic, including the continued strength of Apple silicon with the <a href="https://www.tomsguide.com/computing/cpus/apple-m5-chip-everything-you-need-to-know">M5 chip</a>, the superb new <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> and a recent all-time record for services revenue.</p><p>But there’s also signs of trouble at Apple, including a raft of recent high-profile departures and retirements. <a href="https://www.tomsguide.com/ai/apple-intelligence/apple-intelligences-future-uncertain-following-big-leadership-changes-in-apples-ai-team-heres-why-this-could-be-the-best-outcome">John Giannandrea</a>, Apple’s former head of Apple Intelligence, stepped down in December following a much-publicized delay to the new Siri — not to mention Apple losing ground to OpenAI and Google Gemini. </p><p><a href="https://www.bloomberg.com/news/articles/2025-12-03/apple-design-executive-alan-dye-poached-by-meta-in-major-coup" target="_blank">Meta recently scooped up Alan Dye</a>, Apple’s former head of user interface design, as Mark Zuckerberg looks to extend his company’s lead in smart glasses at a time when Apple is still struggling to sell the pricey Vision Pro. Google is about to unleash its Android XR glasses as well.</p><p>"I don't think 2026 is a make-or-break year for Apple, but I do think it’s going to be a more challenging year than 2025,” said Carolina Milanesi, president and principal analyst at Creative Strategies. “There's going to be challenges if they don't deliver on the AI promise.”</p><p>So what’s in store for Apple in 2026? Based on the rumored product pipeline and my conversations with analysts and Apple watchers, this is a pivotal moment for one of the world’s biggest brands. Here’s what to expect.</p><h2 id="the-iphone-fold-best-selling-foldable-ever">The iPhone Fold: Best-selling foldable ever?</h2><p>Apple is famous for being late to enter new categories, including smartphones. But a 2026 arrival for an Apple foldable device is really, really late.</p><p>As Samsung preps the Galaxy Z Fold 8, Apple is reportedly gearing up to launch its <em>very first</em> foldable phone in the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone"><u>i</u>Phone Fold</a>. Nevertheless, the analyst firm <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-forecasted-to-grab-22-percent-of-foldable-phone-market-in-very-first-year-and-more-than-a-third-of-the-revenue">IDC says Apple will grab more than 20% market share</a> in the coming year and more than a third of the revenue.</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:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="y8ttnRFF7wEwtwXBQBhntU" name="Apple 2026 A iPhone Fold" alt="Render of a potential folding iPhone" src="https://cdn.mos.cms.futurecdn.net/y8ttnRFF7wEwtwXBQBhntU.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" 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 would not be surprised at all if the iPhone Fold instantly became the best selling folding phone of all time,” said Jason Snell, editor of the Apple-centric website <a href="https://sixcolors.com/" target="_blank">Six Colors</a> and former editorial director of <em>Macworld. </em>His reasoning? Simple. “Because it’s an iPhone.”</p><p>While many shoppers have likely been intrigued by the <a href="https://www.tomsguide.com/best-picks/best-foldable-phones">best foldable phones</a> up until now, iPhone fans have mostly sat on the sidelines because they’re not willing to switch operating systems or move out of the Apple ecosystem.</p><p>At the same time, the iPhone Fold is said to have some advantages over the competition, including a truly <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-creaseless-display-could-make-it-a-day-1-purchase-theres-just-one-problem">crease-free display</a> and large library of apps that are optimized for a tablet-size screen. There are millions of iPad apps that will simply just work on day one, as the iPhone Fold will ostensibly be an iPad mini in your pocket. </p><p>The iPhone Fold is tipped to feature a 5.5-inch screen on the outside and a 7.8-inch panel on the inside along with a pretty big 5,400 mAh battery. And it should be quite thin, as analysts are likening the phone to two iPhone Airs attached by a hinge.</p><div><blockquote><p>“I would not be surprised at all if the iPhone Fold instantly became the best selling folding phone of all time."</p><p> — Jason Snell, Editor, Six Colors</p></blockquote></div><p>And the price? The rumor is a <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-just-tipped-to-cost-an-obscene-usd2-399-but-it-could-have-this-apple-exclusive">gulp-inducing $2,40<u>0</u></a>, which would be $400 more than Samsung’s Galaxy Z Fold 7. But don’t underestimate the appetite of high-end iPhone shoppers looking to stand out from the crowd.</p><p>“Ever since the iPhone X came out for $1,000, Apple has been engaged in this ongoing experiment to find what's the upper limit that people are willing to pay for an iPhone,” Snell said. “And looking at their product line and looking at their iPhone revenue, I would say they haven't found it.”</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7585675123789810999" data-video-id="7585675123789810999" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ News - yagobeats" href="https://www.tiktok.com/music/News-7195974399537874945">♬ News - yagobeats</a></section>                    </blockquote></div>                <h2 id="a-super-cheap-macbook">A super cheap MacBook</h2><p>From the time Apple retired the <a href="https://www.tomsguide.com/news/apple-just-killed-the-macbook-air-with-good-keyboard-and-12-inch-macbook">12-inch MacBook</a> in 2019, industry watchers have been waiting for Apple to sell a super affordable MacBook to take on lower-cost <a href="https://www.tomsguide.com/computing/laptops/best-windows-laptops">Windows 11 laptops</a> and premium <a href="https://www.tomsguide.com/best-picks/best-chromebooks">Chromebooks</a>. And we could finally get it in 2026.</p><p>Rumor has it that Apple is working on a <a href="https://www.tomsguide.com/computing/macbooks/cheap-macbook-a18-pro-everything-we-know-so-far">cheap MacBook</a> that could cost as little as $599 or $699, with the machine powered by an A series chip. Apple technically already has a laptop in this price range with the <a href="https://www.tomsguide.com/reviews/macbook-air-2020-m1">MacBook M1</a> still selling at Walmart for $599, but this would be a brand new design.</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:4082px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="h8gTgAoY8XiEDURBBfxKU6" name="MacBook Air M4 2025-13" alt="MacBook Air 13-inch M4 shown on tabletop" src="https://cdn.mos.cms.futurecdn.net/h8gTgAoY8XiEDURBBfxKU6.jpg" mos="" align="middle" fullscreen="" width="4082" height="2296" 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 target audience would be buyers who mostly want to surf the web, check email and watch videos. </p><p>The system will reportedly feature a 13-inch display, an A18 Pro chip (the same one featured in the iPhone 16 Pro models), and very long battery life. And at a time PC makers are facing a RAM shortage, Apple could have a built-in advantage versus the competition. </p><p>“I think we're going to get some very inexpensive MacBooks this year, because Apple is able to press its silicon advantage and there's sort of a curve ball being thrown by the wild swings in prices for memory,” said Avi Greengart, founder and lead analyst for Techsponential. “Apple has such volume, and because they build the memory into their package, rather than added on separately, Apple may end up with a double pricing advantage.”</p><h2 id="meet-the-homepod-touch-or-homepad">Meet the HomePod Touch (or HomePad)</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:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="6cHdWWcJ7vz4iYUqsWBji4" name="Apple 2026 C HomePad Touch" alt="A rendering of an Apple HomePod with iPad-style touchscreen" src="https://cdn.mos.cms.futurecdn.net/6cHdWWcJ7vz4iYUqsWBji4.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Apple)</span></figcaption></figure><p>No one is really clear on the name of this product yet, but Apple is expected to launch a new smart home device that could be dubbed the <a href="https://www.tomsguide.com/audio/apples-homepod-with-a-screen-is-still-coming-in-2025-analyst-claims">HomePod Touch</a> or HomePad. And it could arrive in the spring to coincide with the launch of the revamped Siri.</p><p>The device will reportedly feature a 7-inch touch screen and run Apple’s brand-new homeOS software. It would have pre-installed apps like Safari, Apple Music, Notes, Calendar, Photos and Reminder. And widgets will reportedly be a central feature. Think a beefed-up version of the iPhone’s <a href="https://www.tomsguide.com/news/ios-17-standby">StandBy Mode</a>.</p><div><blockquote><p>“There’s no other brand that is more trusted by consumers than Apple."</p><p>— Carolina Milanesi, president and principal analyst at Creative Strategies</p></blockquote></div><p><a href="https://www.bloomberg.com/news/articles/2025-10-14/apple-to-build-upcoming-homepod-with-screen-tabletop-robot-in-vietnam?embedded-checkout=true" target="_blank">Bloomberg’s Mark Gurman</a> has reported that the HomePod Touch could cost around $350 and come in two versions, one with a speaker base and another that could attach to walls.</p><p>Apple would directly compete against the likes of Amazon and its line of Echo Show products and the <a href="https://www.tomsguide.com/reviews/google-nest-hub-max">Google Nest Hub Max</a>. But how would Apple stand out? For one, the company’s reputation for security and privacy.</p><p>“There’s no other brand that is more trusted by consumers than Apple,” Milanesi said. </p><p>Then there’s the perception that today’s smart home displays in the home just aren’t that smart. You may have an Alexa or Gemini-powered device in your abode, but how often do you use it and is it enjoyable? I happen to have the latest <a href="https://www.tomsguide.com/home/smart-home/echo-show-21-review">Echo Show 21</a> with <a href="https://www.tomsguide.com/ai/alexa-release-date-cost-devices-and-all-the-new-ai-features">Alexa+</a> inside, and I tend not to use it for anything other than turning on Christmas lights and asking about the weather. </p><p>“I feel like nobody's really cracked it,” Snell said. “Alexa and the Google Assistant stuff in the home are not that great. So Apple has opportunities there.”</p><p>But much of this will boil down to how smart the new Siri is and whether people will want to talk to it.</p><h2 id="crashing-the-smart-glasses-party">Crashing the smart glasses party</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="D5oTBDFbp8fxEQN2hHEzXY" name="apple glasses.shutterstock_1738735427" alt="Apple Glasses" src="https://cdn.mos.cms.futurecdn.net/D5oTBDFbp8fxEQN2hHEzXY.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>While the <a href="https://www.tomsguide.com/computing/augmented-reality/apple-vision-pro-m5-2025-review">Apple Vision Pro</a> is technically impressive, there’s no question that Apple’s $3,500 spatial computer has been a commercial flop. The headset is just too heavy and expensive for the masses, and there’s not enough killer apps to make regular use worthwhile. The new Vision Pro M5 merely added a faster chip and comfier strap. </p><p>Meanwhile, Meta has a sizable lead with its smart glasses push. The company has already sold more than 2 million units, as <a href="https://www.cnbc.com/2025/07/28/ray-ban-meta-revenue-tripled-essilorluxottica.html#:~:text=Ray%2DBan%20Meta%20smart%20glasses%20revenue%20tripled%20over,of%20its%20smart%20glasses%20in%20the%20future." target="_blank">sales tripled</a> (300% growth) in the first half of 2025. Meta shows no signs of slowing down, launching a new <a href="https://www.tomsguide.com/computing/smart-glasses/ray-ban-meta-gen-2-review">Ray-Ban Meta gen 2</a> with a sharper camera, longer battery life and improved multimodal Meta AI.</p><p>“Clearly they missed the boat, right?” Snell asked. “Apple decided they were going to build Vision Products top-down instead of bottom-up. I think they probably poo-pooed the idea of doing AirPods as glasses. It's a shame, right? Because they have all the pieces to build that product, and they just didn't build it. So I imagine that in 2026 we'll see that product.”</p><p><a href="https://www.tomsguide.com/computing/smart-glasses/apple-glasses-everything-we-know-so-far">Apple is rumored to be launching AI glasses</a> toward the end of 2026, though that release could slip to 2027. The glasses will reportedly be AI-centric (so heavily dependent on the new Siri) and offer built-in speakers and cameras, but not a display — at least at first.</p><p>“What these products do is heavily voice, camera and AI centric, and it would not be impossible for Apple to launch a pair of glasses that just do those things,” Greengart said. “They would basically be AirPods plus a camera that you wear on your face. There's no reason they couldn't do that.”</p><p>The problem for Apple is that Meta and Google are already racing ahead with smart glasses that have built-in displays. While pricey, the $799 <a href="https://www.tomsguide.com/computing/smart-glasses/meta-ray-ban-display-hands-on-this-is-the-future">Meta Ray-Ban Display</a> shows enormous potential for the category with the way they can display helpful info in your field of view, whether it’s turn-by-turn directions, a viewfinder for photos or a recipe you want to follow along with. The wrist-worn neural band also makes it fairly easy to navigate the interface, though that’s yet another device you need to charge.</p><p>And <a href="https://www.tomsguide.com/computing/smart-glasses/i-just-saw-the-future-of-android-xr-smart-glasses-and-meta-and-apple-are-in-trouble">Google is going to launch Android XR glasses</a> with partners like Samsung and Warby Parker in 2026. I’ve already demoed them and came away very impressed with the Gemini integration. You can do everything from ask what you can make from ingredients in front of you to altering photos with generative AI <em>before </em>you even take them.</p><p>“The use cases are there, even without the world’s best AI,” Greengart said. “But if you layer on serious AI capabilities that then tie into your Android phone, that’s pretty powerful. So Apple is going to need to match that in order to have a competitive product.”</p><h2 id="the-new-siri-or-bust">The new Siri — or bust</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:3000px;"><p class="vanilla-image-block" style="padding-top:50.03%;"><img id="kXY7uTKX6EYEPwD7nBp2G4" name="Apple 2026 E Siri AI" alt="Siri" src="https://cdn.mos.cms.futurecdn.net/kXY7uTKX6EYEPwD7nBp2G4.jpg" mos="" align="middle" fullscreen="" width="3000" height="1501" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide/Apple)</span></figcaption></figure><p>If you’re sensing a theme, you’re right. In order for some of these critical new products to succeed — especially the HomePod with display and smart glasses — Apple has to nail the launch of the new Siri. </p><p>Apple actually promised a much smarter Siri way back in 2024 with the launch of the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-review">iPhone 1<u>6</u></a> lineup. And while Apple delivered on some improvements, like a more conversational assistant, the biggest upgrades never materialized. These include on-screen awareness for content, better personal context understanding (“when is my Mom’s flight landing?”) and performing in-app actions via voice.</p><p>The fully new and improved <a href="https://www.tomsguide.com/ai/apple-intelligence/apples-big-siri-overhaul-looks-set-for-spring-2026-heres-what-itll-be-able-to-do">Siri is now expected to launch in spring of 2026</a>, and there’s a lot riding on it, even if AI isn’t a primary driver for selling devices yet.</p><p>“Apple has to deliver,” Milanesi said. She’s more worried about Gemini than ChatGPT as a direct competitor to Apple because the former has gotten “really good” and ties in with core applications that iPhone owners use regularly, like Google Maps and Gmail.</p><div><blockquote><p>“The lock-in of the Apple ecosystem is real. But if AI becomes a part of your life in a way that you start wanting to use things from Google or OpenAI or Anthropic or someone else, and Apple doesn't have that same level of copilot, that may be a problem.”</p><p>— Avi Greengart, lead analyst, Techsponential</p></blockquote></div><p>There are also reports that <a href="https://www.tomsguide.com/ai/apple-may-incorporate-googles-gemini-ai-assistant-in-siri-2-0">Apple may partner with Gemini</a> to accelerate its own AI, but nothing has been announced. </p><p>Techsponential’s Greengart doesn’t see Google as an immediate threat, but it could become a bigger one if Apple somehow misses with the new Siri. </p><p>“The Android ecosystem has an opportunity to whittle away at the iOS base slowly at first, if Apple is not able to respond,” Greegnart said. “The lock-in of the Apple ecosystem is real. But if AI becomes a part of your life in a way that you start wanting to use things from Google or OpenAI or Anthropic or someone else, and Apple doesn't have that same level of copilot, that may be a problem for Apple.”</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/phones/iphones/iphone-17e-expected-upgrades-heres-why-this-new-iphone-will-be-a-bigger-deal-than-you-think">iPhone 17e expected upgrades — here's why this new iPhone will be a bigger deal than you think</a></li><li><a href="https://www.tomsguide.com/phones/iphones/ios-26-guide">iOS 26 Guide: All the new features and enhancements </a></li><li><a href="https://www.tomsguide.com/computing/macbooks/5-macos-apps-i-install-first-on-every-macbook-i-review">5 macOS apps I install first on every MacBook I review</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 5 of the biggest tech fails of 2025: From the internet breaking down to the RAM price crisis ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/5-of-the-biggest-tech-fails-of-2025-from-the-internet-breaking-down-to-the-ram-price-crisis</link>
                                                                            <description>
                            <![CDATA[ From full-blown internet outages to RAM prices skyrocketing thanks to AI, here are Tom's Guide's top picks of the worst tech had to offer in 2025. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YmSLtpat5eNTRVHqGMLvLK</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/nHudiew2QZkJU3u5nPEH28-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 23 Dec 2025 07:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Darragh Murphy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5QiaTSWf9FcVB7STxcdo4M.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Darragh is Tom’s Guide’s Computing Editor and is fascinated by all things bizarre in tech. This usually leads to assorted coverage varying from washing machines designed for earbuds to the wild world of laptops. Whether it&#039;s connecting Scar from The Lion King to two-factor authentication or turning his love for laptops into a fabricated rap battle from 8 Mile, he believes there’s always a quirky spin to be made.&lt;br&gt;&lt;br&gt;Darragh has previously been an Editor for Laptop Mag and a News Editor for Time Out Dubai, where he also headed the gaming and tech section. His work can be seen in Mashable, Android Police, Shortlist Dubai, Proton, theBit.nz, ReviewsFire and more. &lt;br&gt;&lt;br&gt;While laptops are his bread and butter, he’s also reviewed smartphones, monitors, speakers, docking stations and VPNs. He’s covered IFA, MWC Barcelona, the Consumer Electronics Show (&lt;a href=&quot;https://www.tomsguide.com/uk/tag/ces&quot; target=&quot;_blank&quot;&gt;CES&lt;/a&gt;) and more.&lt;br&gt;&lt;br&gt;When he&#039;s not checking out the latest devices and all things computing, he can be found going for dreaded long runs, watching terrible shark movies, and trying to find time to game.&lt;/p&gt; ]]></dc:description>
                                                                                                        <dc:contributor><![CDATA[ Tom&#039;s Guide Staff ]]></dc:contributor>
                                                                                                                                                                                    <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/nHudiew2QZkJU3u5nPEH28-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock / Meta ]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Mark Zuckerberg, iPhone with AWS logo and Ram stick]]></media:description>                                                            <media:text><![CDATA[Mark Zuckerberg, iPhone with AWS logo and Ram stick]]></media:text>
                                <media:title type="plain"><![CDATA[Mark Zuckerberg, iPhone with AWS logo and Ram stick]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/nHudiew2QZkJU3u5nPEH28-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>What a year 2025 has been. We've seen AI take off with <a href="https://www.tomsguide.com/ai/this-is-a-dead-giveaway-that-youre-watching-an-ai-generated-video">hyper-realistic photos and videos</a> that took the internet by storm, Nintendo finally launch its long-awaited <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-console-review">Switch 2</a>, Valve actually drop word on its upcoming <a href="https://www.tomsguide.com/gaming/pc-gaming/i-might-ditch-my-gaming-pc-for-the-steam-machine-heres-why">Steam Machine</a> and <em>so </em>much more. Oh, and I suppose <a href="https://www.tomsguide.com/entertainment/streaming/watch-blue-origin-launch-for-free-live-stream-katy-perry">Katie Perry blasting off into space</a>. </p><p>The past year has seen some massive moments for tech, and many of these were unquestionably the biggest fails we here at Tom's Guide have seen. Will it be remembered as the year the internet broke? When RAM prices were one the cheapest PC component you could get? </p><p>One thing is clear: 2025 was a time like no other, for better and for worse. And we're here for the latter to be set in stone. </p><p>Maybe we can take these blunders and reflect upon them in 2026 to make sure they never happen again... who am I kidding? Mistakes will always be around the corner, but let's make sure these moments in tech aren't forgotten by marking them off in Tom's Guide's list of the biggest tech fails of 2025. Now, ready for the worst? </p><h2 id="ramaggeddon">RAMaggeddon</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NSYr6nsP63PRbdJFMNL5pT" name="RAM sticks.jpg" alt="Two RAM sticks" src="https://cdn.mos.cms.futurecdn.net/NSYr6nsP63PRbdJFMNL5pT.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>I don’t know about you, but for me, 2025 was a year-long reminder that the material conditions many of us take for granted only exist thanks to a global supply chain that’s a lot more precarious than we like to think about.</p><p>In addition to watching failures in cloud storage providers like Amazon Web Services and Microsoft Azure cause huge problems for businesses and users worldwide, we saw prices for RAM and SSDs skyrocket over the last few weeks due (at least in part) to a steep increase in demand from AI companies.</p><p>I had been hoping the issue would blow over, but when <a href="https://www.tomsguide.com/computing/hardware/ram-crisis-continues-to-worsen-micron-kills-crucial-consumer-memory-in-favor-of-ai-data-centers">Micron killed its Crucial line of RAM</a> in early December “in order to improve supply and support for larger, strategic customers in faster-growing segments” (i.e. AI data centers), I knew we were in for a big headache. Now we’ve quickly reached the point where it’s <a href="https://www.tomsguide.com/computing/gaming-desktops/it-is-now-cheaper-to-buy-a-pre-built-gaming-pc-than-building-one-yourself-this-ram-price-crisis-is-only-going-to-get-worse-from-here">cheaper to buy a pre-built gaming PC than build one yourself</a>, much like it was during the height of the COVID-19 global shutdown, when prices on high-end graphics cards (and many other PC components) skyrocketed due to high demand and not enough supply.</p><p>Unfortunately, since this happened late in the year, the RAM crisis is one big 2025 downer that’s likely to carry well into 2026 and beyond. It doesn’t just impact folks buying (or building) desktops and laptops, either; RAM shortfalls affect manufacturers of tablets, gaming consoles and more. So <a href="https://www.tomsguide.com/computing/brace-yourself-pcs-laptops-and-phones-may-jump-in-price-as-early-as-december-thanks-to-a-500-percent-ram-ssd-surge">brace yourself: PCs, laptops and phones may jump in price</a> by 100-500% in the year ahead as manufacturers burn through their stockpiles and either jack up prices or stop selling certain products entirely. Thanks, AI! <em>— </em><a href="https://www.tomsguide.com/author/alex-wawro"><em>Alex Wawro</em></a></p><h2 id="the-internet-has-had-a-real-shaky-year">The internet has had a real shaky year</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:1280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="VG4HrCsKYviDVpdwFPwK6H" name="Cloudflare" alt="Orange Cloudflare logo displayed on smartphone. There is an orange cloud with black text and a larger orange cloud in the background" src="https://cdn.mos.cms.futurecdn.net/VG4HrCsKYviDVpdwFPwK6H.jpg" mos="" align="middle" fullscreen="" width="1280" height="720" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Cheng Xin / Getty Images)</span></figcaption></figure><p>The planet is dependent on an internet connection — from vital government services to the household items around us. It’s much more than our connection to the world’s information; it’s integral to our lives.</p><p>And much of what we use the internet for is dependent on three: Amazon Web Services, Microsoft Azure and Google Cloud. These three account for approximately 65% of the entire internet, and they all suffered significant outages, which revealed some fragilities in the system.</p><p>Whether it’s the internet’s phonebook (DNS register) being run out of one server region for the planet, or content delivery networks bugging out, whenever one of these companies sneezes, the internet catches the flu, and it costs billions of dollars to the businesses that rely on it.</p><p>Then there’s the impact on you. Smart doorbells become glorified paperweights, essential banking services disappear and you can’t book a doctor’s appointment. There’s too much on the line not to address some of the issues in the lack of multi-regionality in these system architectures, and business/governments having a proper backup plan baked into their IT.</p><p>Oh, and shoutout to <a href="https://www.tomsguide.com/news/live/cloudflare-down-december-2025">Cloudflare</a>, too! While it’s not a cloud storage company, this service accounts for around 20% of all websites and went down. <em>— </em><a href="https://www.tomsguide.com/author/jason-england"><em>Jason England</em></a></p><h2 id="live-demos-are-risky-business">Live demos are risky business</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="bgVCHUcYY33NK5Kjg4zSfh" name="Meta Connect 2025_ Opening Keynote 53-52 screenshot" alt="Meta RayBan Display with Zuckerberg's PoV" src="https://cdn.mos.cms.futurecdn.net/bgVCHUcYY33NK5Kjg4zSfh.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: Meta)</span></figcaption></figure><p>Look, I applaud tech companies using live demos to show off their latest products. If they work as intended, they’ll be lauded as a technical marvel, especially if the stakes are high. If not, though, it goes down in history as a brutal “cringe” moment. Elon Musk felt the burn when the “bulletproof” Armored Glass of his <a href="https://www.tomsguide.com/vehicle-tech/tesla-cybertrucks-may-not-have-been-ready-and-now-theyre-malfunctioning">Cybertruck</a> shattered right before everyone’s eyes, and in 2025, Meta was awarded the fail of the year. </p><p>After revealing the much-anticipated <a href="https://www.tomsguide.com/computing/smart-glasses/meta-ray-ban-display-hands-on-this-is-the-future">Meta Ray-Ban Display</a> smart glasses at <a href="https://www.tomsguide.com/news/live/meta-connect-2025-live-updates">Meta Connect 2025</a>, pushing the tech to new heights with a seamless built-in display and a boatload of AI-enhanced apps, CEO Mark Zuckerberg decided to get a call on stage from fellow CTO Andrew "Boz" Bosworth via WhatsApp. Or, <em>tried </em>to, at least, as all we got instead was an incessant ring tone on loop, a broken AI voice stating “Boz WhatsApp video call” and an awkward Zuckerberg umming and ahing to try and rectify the situation. </p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7551224087423585549" data-video-id="7551224087423585549" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ original sound - Tom’s Guide" href="https://www.tiktok.com/music/original-sound-7551224184056171277">♬ original sound - Tom’s Guide</a></section>                    </blockquote></div>                <p>I mean, what else can you do when your flagship product that billions of dollars have been invested in fails live on stage? Alas, the call failed multiple times until Boz finally joined Mark on stage. It was blamed on the terrible Wi-Fi, as it was during <em>another</em> live demo when a chef asked Meta’s Live AI to create a Korean-inspired steak sauce, only for both parties to be stuck in a loop of “what do I do first?” and “you’ve already combined the base ingredients.” No, Chef Jack Mancuso had never done the latter.</p><p>Was that actually the problem, though? Nope. <a href="https://www.tomsguide.com/computing/smart-glasses/meta-fail-heres-why-mark-zuckerbergs-ray-ban-display-demo-didnt-work">Zuckerberg's Meta Ray-Ban Meta demo didn't work</a> because, first, there were too many people in the building during the rehearsal of the Live AI demo, with Boz stating, "we DDoS’d ourselves, basically." As for the WhatsApp call, that was due to a "never-before-seen bug." As Boz notes: "The display had gone to sleep at the very instant the notification had come in that a call was coming in." At the very least, that bug is now fixed. </p><p>Is that a resounding “oof” I hear? It’s still ringing in my ears. But when all is said and done, I’ll always prefer a tech company to try and impress by straight up showing me what its product can do. Let’s just make sure there’s enough prep time so it all works swimmingly right off the bat before becoming another infamous meme. Hey, it worked with Apple when Tom’s Guide’s Global Editor-in-Chief<a href="https://www.tomsguide.com/phones/iphones/iphone-17-interview-greg-joswiak-john-ternus"> Mark Spoonaur attempted to bend the iPhone Air during a live interview</a> without any damage, so take note. <em>— </em><a href="https://www.tomsguide.com/author/darragh-murphy"><em>Darragh Murphy</em></a></p><h2 id="thinner-phones-just-cannot-catch-a-break">Thinner phones just cannot catch a break</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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iQJmn4VqzAJgFEn92xxox" name="iPhone Air-2" alt="iPhone Air shown in hand" src="https://cdn.mos.cms.futurecdn.net/iQJmn4VqzAJgFEn92xxox.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>One of the big pushes in phone hardware has to be making them thinner. While this was fine when it came to the best foldable devices, it certainly didn’t go well for the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-review">iPhone Air </a>and the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-edge-review">Galaxy S25 Edge</a>.</p><p>Thinner phones, as a concept, are not inherently a terrible idea. They’re easy to carry and more comfortable to keep in your pocket for one thing. The problem that both Apple and Samsung had was the sacrifices that had to be made. That includes having a lower battery life (to the degree the iPhone Air needs an actual case to reach the same level as the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a>) and offering fewer camera options. </p><p>Having lower specs could, in theory at least, be an acceptable trade for the much vaunted thinness. However, the issue was that both companies decided that you should pay more cash for less. The iPhone Air cost $999 when it was released, while the Galaxy S25 Edge cost a staggering $1,099. That means both phones are more expensive than the $799 you’d pay for both the iPhone 17 and <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s25-review">Galaxy S25</a>. That’s a big ask for a phone that has some noticeable drawbacks compared to the alternatives.</p><p>So what was the result? People simply weren’t interested in the phone to the degree that it was hoped. Now, we’re hearing that Samsung has paused work on the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s26-edge">Galaxy S26 Edge</a>, potentially <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-reportedly-canceling-galaxy-s26-edge-poor-sales-of-s25-edge-lead-to-last-minute-change">pushing back the release of the entire Galaxy S26 range</a>. Meanwhile, the <a href="https://www.tomsguide.com/phones/iphones/iphone-air-2-may-not-be-dead-after-all-heres-what-apple-may-have-planned-for-its-next-gen-slim-iphone">iPhone Air 2 has seemingly been delayed until 2027</a>. So while we may see the next generation of thinner phones, it looks like phone makers are being much more wary this time around. <em>— </em><a href="https://www.tomsguide.com/author/josh-render"><em>Josh Render</em></a></p><h2 id="chatgpt-5">ChatGPT-5</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:1070px;"><p class="vanilla-image-block" style="padding-top:50.00%;"><img id="9mmYDgZ3CtyVPqmKqin3hN" name="ChatGPT-5" alt="ChatGPT-5 Image on a keyboard" src="https://cdn.mos.cms.futurecdn.net/9mmYDgZ3CtyVPqmKqin3hN.png" mos="" align="middle" fullscreen="" width="1070" height="535" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: ChatGPT AI generated image)</span></figcaption></figure><p>This has been a big year for OpenAI. The company behind ChatGPT has had its ups and downs, but by far its messiest of experiences was the GPT-5 launch.</p><p>After the incredible success of GPT-4o, and ChatGPT’s dominance in the world of AI chatbots, everyone was waiting patiently for the next launch, one that was supposed to change the world.</p><p>For months, the launch was teased and then delayed. Sam Altman and his team spoke of its brilliance and how they were almost scared of just how good it actually was… and then GPT-5 dropped.</p><p>Despite all of the build-up, there just wasn’t much substance. It was smarter, had a few more features and, when put against benchmark tests, was the best version of ChatGPT yet. But it still felt pretty underwhelming.</p><p>Not only that, but when users started actually using it, many felt the experience was actually worse than the previous version that had been rolled out.</p><p>To make matters worse, this older version had also been removed, forcing everyone to use ChatGPT-5 instead. OpenAI ended up getting so many complaints that the company had to pull a reverse, offering users the choice between models and promising to make rapid improvements to GPT-5.</p><p>Since then, OpenAI has released two critical updates, now bringing us up to GPT-5.2. Despite efforts to fix the damage, GPT-5 has likely been the company's least popular launch to date, and gave competitors much-needed time to catch up with it. <em>— </em><a href="https://www.tomsguide.com/author/alex-hughes"><em>Alex Huges</em></a></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/computing/cpus/cpu-war-2026-intel-panther-lake-vs-snapdragon-x2-elite-vs-amd-gorgon-point">Intel Panther Lake vs Snapdragon X2 Elite vs AMD Gorgon Point — one chip is already pulling ahead in 2026's CPU war</a></li><li><a href="https://www.tomsguide.com/gaming/pc-gaming/microsoft-promises-to-improve-pc-gaming-in-2026-but-will-it-be-enough-to-topple-steam">Microsoft promises to improve PC gaming in 2026, but will it be enough to topple Steam?</a></li><li><a href="https://www.tomsguide.com/computing/macos/i-just-discovered-a-secret-productivity-hack-for-my-mac-and-its-transformed-how-i-focus">I just discovered a secret productivity hack for my Mac, and it’s transformed how I focus</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Tom’s Guide Value Awards: The 43 Best Tech Bargains of the Year  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/value-awards</link>
                                                                            <description>
                            <![CDATA[ The price of everything is too much these days. This is the gear we've tested that delivers the greatest value. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KkQbhszCbhadC2yop8jjhG</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Lx7SUvZChnMQ56dSNeT3aN-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 17 Dec 2025 12:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Mattresses]]></category>
                                                    <category><![CDATA[Fitness]]></category>
                                                    <category><![CDATA[Home]]></category>
                                                    <category><![CDATA[Smart Home]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Wellness]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tom&#039;s Guide Staff ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/6hCNi5TkwpnQYs6nUTtoPc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Lx7SUvZChnMQ56dSNeT3aN-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[TG Value Awards 2025]]></media:description>                                                            <media:text><![CDATA[TG Value Awards 2025]]></media:text>
                                <media:title type="plain"><![CDATA[TG Value Awards 2025]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Lx7SUvZChnMQ56dSNeT3aN-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Right now everything is too expensive. Groceries, electricity, you name it. But if you’re in the market for a tech upgrade and you don’t want to spend a fortune for a quality gadget, you’ve come to the right place.</p><p>At Tom’s Guide we test and review hundreds of products each year, and our first annual Value Awards recognizes the very best bang-for-your-buck devices across multiple categories. So whether you’re looking for a big-screen Mini-LED TV, noise cancelling headphones or a new coffeemaker, we’ve got you covered with the very best bargains money can buy.</p><h3 class="article-body__section" id="section-tvs"><span>TVs</span></h3><h2 id="best-value-tv-hisense-u65qf-mini-led-tv">Best Value TV: <a href="https://www.tomsguide.com/tvs/4k-tvs/hisense-u65qf-mini-led-tv-review">Hisense U65QF Mini-LED TV</a></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:1260px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="tCws4PKcLJgbXiswHMKMTi" name="Hisense-U65QF-01-LIST" alt="Hisense U65QF in an apartment" src="https://cdn.mos.cms.futurecdn.net/tCws4PKcLJgbXiswHMKMTi.jpg" mos="" align="middle" fullscreen="" width="1260" height="709" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Hisense)</span></figcaption></figure><p>From the moment I laid eyes on it, I knew the Hisense U65QF was one of the <a href="https://www.tomsguide.com/us/best-tvs,review-2224.html">best TVs</a> for the money. For a sub-$500 TV, it 's super bright, incredibly colorful and, despite using Amazon’s Fire TV platform, a joy to use. When we brought it into our labs, we confirmed all of the above. </p><p>Starting at $449 for the 55-inch Hisense 55U65QF, this budget TV put its main rivals — the TCL QM6K and LG QNED80T — in their place with its 946 nits of peak brightness and Delta-E color accuracy score (lower is better) of 1.83. I’d never seen scores like these from an affordable TV before, and I knew we found something special. </p><p>It has some issues with motion processing and upscaling, but in this price range there’s no better option than Hisense’s budget king. <em>— Nick Pino</em></p><h2 id="best-value-oled-samsung-s90f-oled-tv">Best Value OLED: <a href="https://www.tomsguide.com/tvs/oled-tvs/samsung-s90f-oled-tv-review">Samsung S90F OLED TV</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.15%;"><img id="oSubD3BL8bJCP93XLZxQ8C" name="Samsung S90F--5" alt="Samsung S90F" src="https://cdn.mos.cms.futurecdn.net/oSubD3BL8bJCP93XLZxQ8C.jpg" mos="" align="middle" fullscreen="" width="2000" height="1123" 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 Samsung S90F is one of the <a href="https://www.tomsguide.com/tvs/oled-tvs/best-oled-tvs">best OLED TVs</a> of the year. It’s expertly priced and built with a slew of features for gamers and HDR movie lovers alike. What stands out most is its QD-OLED panel, a special design that combines quantum dots with OLEDs for enhanced color performance and contrast, which is exemplified by the metrics from our testing labs. </p><p>Highlighting this incredible color performance is its 100% coverage of the UHDA-P3 gamut, matched only by the Sony Bravia 8 II this year. In filmmaker mode, the Samsung S90F also has one of the best Delta-E (color accuracy) scores. In this case, Samsung’s middle-of-the-road OLED not only offers one of the broadest ranges in color coverage for HDR movies and shows but also realistic and lifelike color performance. </p><p>Samsung added Art Store compatibility to the full range of 2025 TVs, so the S90F can act like its popular The Frame, displaying famous photographs and art from around the world when it’s not in use. Given its exceptionally thin design, the S90F feels even more like a work of art, especially when it's wall-mounted.  <em>— Nick Pino</em></p><h2 id="best-value-streaming-stick-roku-streaming-stick-plus">Best Value Streaming Stick: <a href="https://www.tomsguide.com/entertainment/streaming-devices/roku-streaming-stick-plus-review-a-slimmed-down-4k-hdr-powerhouse">Roku Streaming Stick Plus</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bsgwU2gbTf52fWgJyzab5i" name="Roku Streaming Stick Plus-1-LIST" alt="Roku Streaming Stick Plus" src="https://cdn.mos.cms.futurecdn.net/bsgwU2gbTf52fWgJyzab5i.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>You can’t go wrong with a Roku streaming stick, and the Streaming Stick Plus is the most well-rounded value of the lot. It’s designed to meet most needs, offering performance where it counts in both HDR playback and speedy navigation. With 4K/60Hz playback, it’s a stellar streaming stick to rival Amazon and Google, packing several additional features that make it among the <a href="https://www.tomsguide.com/entertainment/streaming-devices/best-streaming-devices">best streaming devices</a>. </p><p>Although it’s normally priced at $39, the Roku Streaming Stick Plus maintains a consistent discount of $29. It’s incredibly lightweight and thin, weighing just 0.90 ounces (26.0 grams), which makes it the perfect travel companion. It also comes with access to Roku’s smart home ecosystem, allowing you to check on cameras, turn on lights, and keep a watchful eye on other Roku home accessories. <em>— Ryan Epps</em></p><h3 class="article-body__section" id="section-phones"><span>Phones</span></h3><h2 id="best-value-android-phone-google-pixel-9a">Best value Android phone: <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9a-review">Google Pixel 9a</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="o4mm7sRiU2yAEdKaMbqstb" name="Google Pixel 9a review" alt="Google Pixel 9a held in the hand." src="https://cdn.mos.cms.futurecdn.net/o4mm7sRiU2yAEdKaMbqstb.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>You don’t have to pay $799 or more to get a top-performing camera phone. Google’s Pixel 9a is capable of taking photos that rival anything you get from the leading flagships, even though it costs a fraction as much with its $499 starting price. The Pixel 9a benefits from the same photo-processing algorithms found on Google’s flagship phones, so images look sharp and detailed, with a nice dynamic range balancing light and shadow.</p><p>That’s not the only way the Pixel 9a offers you more value for your dollar. Its Tensor G4 chip means it can support most of the leading Google AI capabilities. (The Pixel 10 series and its newer G5 silicon introduces some newer tools.) So your phone can still offer smarts usually limited to more expensive devices among the <a href="https://www.tomsguide.com/best-picks/best-phones">best phones</a>. <em>— Philip Michaels</em></p><h2 id="best-value-iphone-iphone-17">Best value iPhone: <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a></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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3Qc5kCG8m6FcnioZv2PK9e" name="Apple iPhone 17 review" alt="Apple iPhone 17 review." src="https://cdn.mos.cms.futurecdn.net/3Qc5kCG8m6FcnioZv2PK9e.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>While not the cheapest iPhone you can currently buy (that would be the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16e-review">iPhone 16e</a>), the iPhone 17 remains the same price as previous standard iPhones while adding a whole bunch of upgrades. </p><p>A larger screen with a smoother 120Hz refresh rate gives the iPhone 17 a premium touch that has been missing for many years. The dual 48MP cameras on the back, combined with the new 18MP Center Stage camera on the front, make the 17's photography capabilities more versatile than ever, while the updated A19 chipset offers users both zippier performance and better battery life. Unless you want to brave the used market, you can't get more iPhone for the money than this. <em>— Richard Priday</em></p><h3 class="article-body__section" id="section-laptops-and-tablets"><span>Laptops and tablets</span></h3><h2 id="best-value-mac-macbook-air-m4">Best value Mac: <a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review">MacBook Air M4</a></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:3193px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UbMJMVGeKd2UvjMvkZZPX6" name="MacBook Air M4 2025-LIST1" alt="MacBook Air 13-inch M4 shown on tabletop" src="https://cdn.mos.cms.futurecdn.net/UbMJMVGeKd2UvjMvkZZPX6.jpg" mos="" align="middle" fullscreen="" width="3193" height="1796" 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>Apple makes some of the <a href="https://www.tomsguide.com/computing/laptops/best-laptops">best laptops</a>, but they usually come with a premium. Well, that norm has been completely shattered by the M4 MacBook Air — delivering all the face-melting performance and impressive power efficiency you’d expect from any Apple Silicon-armed system at a mightily good price. At $799 (yes, the MSRP is $999, but it’s been <a href="https://www.amazon.com/Apple-2025-MacBook-13-inch-Laptop/dp/B0DZD9S5GC"><u>$200 off for months now</u></a>, so consider this the “real” retail price), this premium ultra thin-and-light is the game changer the laptop industry’s been looking for. <em>— Jason England</em></p><h2 id="best-value-windows-laptop-acer-aspire-go-15">Best value Windows laptop: <a href="https://www.tomsguide.com/computing/laptops/acer-aspire-go-15">Acer Aspire Go 15</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LSzntB5iwUhEzT7L9h6kmW" name="TG_Acer-Aspire-Go-15-2024-3.jpg" alt="Acer Aspire Go 15 (2024) review unit on desk" src="https://cdn.mos.cms.futurecdn.net/LSzntB5iwUhEzT7L9h6kmW.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>When you just need the <a href="https://www.tomsguide.com/computing/laptops/best-windows-laptops">best Windows 11 laptop</a> you can get for the cheapest possible price, look to the Acer Aspire Go 15. This $299 budget laptop has just enough hardware packed into its four-pound frame for writing, browsing the web and playing basic games. Streaming videos won't look amazing on the 15.6" 1080p display and you'll look washed-out and grainy on the 720p webcam, but they keyboard is comfy. Plus. you get plenty of ports to plug in your favorite accessories — including a better webcam if it's really important to you. And since it lasted over 10 hours in our battery tests, you know the Acer Aspire Go 15 will last you through a day of work or school.  <em>— Jason England</em></p><h2 id="best-value-tablet-ipad-11">Best value tablet: <a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EENuHfMvyDEDbNKeTXA4X" name="iPad 11" alt="iPad 11" src="https://cdn.mos.cms.futurecdn.net/EENuHfMvyDEDbNKeTXA4X.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 / Tom's Guide)</span></figcaption></figure><p>Let the iPad Air and iPad Pro deliver the power of a laptop in a tablet. I’m here for Apple’s most affordable tablet, bringing more than enough performance to handle demanding apps, games and all the streaming services to binge my way through shows. For most, it does everything a tablet should offer and beyond, thanks to its speedy A16 chip — and <em>finally </em>delivering 128GB for storage is a boon. Apple’s base iPad offers a premium tablet experience for $349, which isn’t a bad deal, but considering it’s often found for $299 or less, the iPad 11 is value at its finest for a tablet. <em>— Darragh Murphy</em></p><h2 id="best-value-mechanical-keyboard-keychron-c1-pro-8k">Best value mechanical keyboard: <a href="https://www.tomsguide.com/computing/peripherals/keychron-c1-pro-8k-review">Keychron C1 Pro 8K</a></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="aQzcXLnsT4DnB2jHnZCsEF" name="Keychron C1 Pro 8K" alt="Keychron C1 Pro 8K photographed in front of a blue background." src="https://cdn.mos.cms.futurecdn.net/aQzcXLnsT4DnB2jHnZCsEF.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>The Keychron C1 Pro 8K is a retro-style wired mechanical keyboard that’s ideal for touch typists. The board’s typing angle and rake make it incredibly smooth to type on, so you can work all day long without fear of strained wrists. The board is also hot-swappable, so you can make changes to the switches and keycaps to make it the ideal keyboard for you. And since it has 8K polling, you could kit it out to be one of the <a href="https://www.tomsguide.com/computing/keyboards/ive-tested-countless-mechanical-keyboards-these-are-the-only-ones-id-buy">best gaming keyboards</a> too. <em>— Ashley Thieme</em></p><h3 class="article-body__section" id="section-audio"><span>Audio</span></h3><h2 id="best-value-headphones-1more-sonoflow">Best value headphones: <a href="https://www.tomsguide.com/audio/1more-sonoflow-pro-review">1More Sonoflow</a></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:4080px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hapjvd7LEFrqHsRixMeqHb" name="1More SonoFlow .jpg" alt="The 1More SonoFlow noise-cancelling headphones rested up against a concrete wall" src="https://cdn.mos.cms.futurecdn.net/Hapjvd7LEFrqHsRixMeqHb.jpg" mos="" align="middle" fullscreen="" width="4080" height="2295" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Alex Bracetti/Future)</span></figcaption></figure><p>The 1More Sonoflow show you what’s possible with a small amount of money. They make the sacrifices in all the right places — looks, extra features — so that they can focus on the important stuff. You know, like sound quality and noise-canceling performance. They sound much better than just about anything at the same, sub $100 price point, and block out plenty of noise. The icing on the budget cake? 65 hours of battery life. They even come with a helpful protective case to keep them safe from harm. What more could you want from the <a href="https://www.tomsguide.com/us/best-wireless-headphones,review-5565.html">best headphones</a> under $100?<em>— Tammy Rogers</em></p><h2 id="best-value-earbuds-sony-wf-c710n">Best value earbuds: <a href="https://www.tomsguide.com/audio/earbuds/sony-wf-c710n-wireless-earbuds-review">Sony WF-C710N</a></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="tvZF87w5dAniyx6zSwXbZb" name="Sony_WF_C710N_ 8.JPG" alt="A pair of Glass Blue Sony WF-C710N wireless earbuds." src="https://cdn.mos.cms.futurecdn.net/tvZF87w5dAniyx6zSwXbZb.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>Sony’s $129 noise-canceling earbuds are one of the best things we’ve tested all year at Tom’s Guide. Despite their low price, Sony has loaded them with excellent ANC and some of the best sound under $200. They beat out options that cost twice as much — and even come in a very slick, jolly-ranchers-esque clear blue colorway. 8.5 hours of battery life helps cement them in 2025’s list of biggest pleasant surprises — and as some of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best earbuds</a> you can buy. <em>— Tammy Rogers</em></p><h2 id="best-value-speakers-edifier-r1280t">Best value speakers: <a href="https://www.tomsguide.com/audio/speakers/edifier-r1280t-review">Edifier R1280T</a></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:42.81%;"><img id="b3k25BzVfvnHqg8uUVMugX" name="Edifier_R1280T_ 1.JPG" alt="the edifier r1280t bookshelf speakers in wood brown photographed against the blue background, showing the volume adjustment dials, internal drivers and tweeters, RCA and aux inputs, and remote" src="https://cdn.mos.cms.futurecdn.net/b3k25BzVfvnHqg8uUVMugX.jpg" mos="" align="middle" fullscreen="" width="2560" height="1096" 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>We’ll always shout about low-cost gear in Tom’s Guide’s Audio section, and the R1280T deserves a ton of praise. They’re a spectacular-sounding pair of retro-looking speakers, with plenty of inputs on the back so you can build a music system around them. Great for desktops and small to mid-size rooms, these $150 wonders are an excellent option if you’re looking to up your speaker game. <em>— Tammy Rogers</em></p><h2 id="best-value-soundbar-creative-stage-pro">Best value soundbar: <a href="https://www.tomsguide.com/audio/soundbars/creative-stage-pro-review">Creative Stage Pro</a></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:5653px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="MLu89jjwnKMgThVC7zzL4j" name="Creative Stage V2 (5).JPG" alt="The Creative Stage V2 placed in front of a TV" src="https://cdn.mos.cms.futurecdn.net/MLu89jjwnKMgThVC7zzL4j.jpg" mos="" align="middle" fullscreen="" width="5653" height="3179" 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 two things we’re looking for when it comes to the <a href="https://www.tomsguide.com/best-picks/best-cheap-soundbars">best cheap soundbars</a>. Great sound is a given, but we also want to make sure that you’re going to get a decent package without spending more on a subwoofer — and the Stage Pro brings the goods. It comes with a subwoofer included in the box, so you get those lovely, floor-rumbling bass tones for your movies and TV. Dialogue is clear, and movie soundtracks sound stirring. There’s not really much more we could ask for at this impressive sub-$200 price point. <em>— Tammy Rogers</em></p><h3 class="article-body__section" id="section-fitness"><span>Fitness</span></h3><h2 id="best-value-walking-treadmill-deerrun-q1-mini">Best value walking treadmill: <a href="https://www.tomsguide.com/wellness/fitness/deerrun-q1-mini-review">Deerrun Q1 Mini</a></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="rEtQSQXGqaMtrvH6coV6uQ" name="DeerRun_Treadmill_ 7.JPG" alt="the deerrun q1 mini under desk treadmill walking treadmill in a home office with a blue wall and wooden floor" src="https://cdn.mos.cms.futurecdn.net/rEtQSQXGqaMtrvH6coV6uQ.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>The DeerRun Q1 Mini is the ideal solution for remote at-home workers who want to get their steps in while still at their desk. It’s not for runners, since it has a max speed of 3.8mph, but the 35-inch belt is perfect for taking strides at your desk. It’s a super affordable option for an <a href="https://www.tomsguide.com/best-picks/best-under-desk-treadmills">under-desk treadmill</a> and is the perfect size to fit under standing desks, and is easy to move around for storage, since it’s on wheels. For less than $150, it’s everything you could want from a walking treadmill to boost your activity scores. <em>— Sam Hopes</em></p><h2 id="best-value-massager-hyperice-venom-go">Best value massager: <a href="https://www.tomsguide.com/wellness/fitness/hyperice-venom-go-review">Hyperice Venom Go</a></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="mdeqeVFmx7EZHmKNKLSM3W" name="Hyperice Venom Go" alt="Hyperice Venom Go photographed ona grey background." src="https://cdn.mos.cms.futurecdn.net/mdeqeVFmx7EZHmKNKLSM3W.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>The Hyperice Venom Go is the perfect way to get targeted sports recovery and relief from everyday aches and pains. It uses reusable sticky pads that gel to the skin and conduct heat and vibrations from the massage pod. The combination of heat and vibrations soothes muscle tension but drawing blood flow to the area, and the compact size of the Venom Go means you can take it with you anywhere. The Hyperice app is also a great way to visualize your recovery routine with the device, so you can see exactly what works for you. <em>— Sam Hopes</em></p><h2 id="best-value-fitness-earbuds-soundcore-aeroclip">Best value fitness earbuds: <a href="https://www.tomsguide.com/audio/earbuds/soundcore-aeroclip-review">Soundcore AeroClip</a></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="53TvxxEQYnVgVLXa2kM9oY" name="Soundcore AeroClip earbuds" alt="Soundcore AeroClip open-ear earbuds in champagne mist against a blue backdrop" src="https://cdn.mos.cms.futurecdn.net/53TvxxEQYnVgVLXa2kM9oY.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>The Soundcore Aeroclips are the <a href="https://www.tomsguide.com/wellness/fitness/best-workout-headphones">perfect open-earbuds for getting active</a> and staying aware of your surroundings. They’re incredibly comfortable with awesome sound quality, and you can even customize the sound with the Soundcore app. You get 32 hours of listening time with the charging case and eight hours of playback in the buds. The design is super sleek, and they don’t budge even during the most high-intensity workouts. They also have a waterproof rating of IPX4, meaning they are protected from water splashes in all directions, making them perfect for working out in the rain too. <em>— Sam Hopes</em></p><h2 id="best-value-running-shoe-puma-velocity-nitro-4">Best value running shoe: <a href="https://us.puma.com/us/en/pd/velocity-nitro-4-mens-road-running-shoes/311140">Puma Velocity Nitro 4</a> </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mzm3RFv7XS8MhH6W7HiLkM" name="Puma Velocity Nitro 4" alt="Puma Velocity Nitro 4" src="https://cdn.mos.cms.futurecdn.net/mzm3RFv7XS8MhH6W7HiLkM.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>Finding value in the running shoe market often means buying older models in sales, but the Puma Velocity Nitro 4 is an excellent new shoe that undercuts most of its competitors on price while also outperforming them. It has enough cushioning to deliver a comfortable ride during your easy daily training runs, but the lively foam in its midsole provides enough bounce for faster workouts as well. Add in a comfortable upper and a durable outsole that grips better than most shoes in slick conditions and the Velocity Nitro 4 is a terrific all-round option at a good price. <em>— Nick Harris-Fry</em></p><h2 id="best-value-cross-trainer-nike-metcon-10s">Best value cross trainer: <a href="https://www.nike.com/t/metcon-10-mens-workout-shoes-WWGl2m1D/HJ1875-003">Nike Metcon 10s</a> </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="6R8pHHfqUkpB47qKYS6R4k" name="nike metcon 10 outdoors" alt="Nike Metcon 10 in black and white on grass" src="https://cdn.mos.cms.futurecdn.net/6R8pHHfqUkpB47qKYS6R4k.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>The Nike Metcon lineup has sat pretty stagnant in the cross training shoe world, with the 8s and 9s considered overly stiff and lacking versatility compared with competitors. However, the Metcon 10 has changed everything. The 10s tick boxes for stability, grip, lockdown and mobility, and are the comfiest pair from Nike we’ve tested yet, finally answering calls for true versatility. </p><p>The over-pronounced rubber wrap rope guard has been pared back, and the shoe has been made more pliable and flexible around the forefoot with a wider toe box and a stable but minimized Hyperlift plate for lifting. Dual-density ReactX midsole cushioning makes the shoe feel bouncier and suited to short runs. We think that, given the brand (and range), it offers true value for the money. <em>— Sam Hopes</em></p><h3 class="article-body__section" id="section-wearables"><span>Wearables</span></h3><h2 id="best-value-smartwatch-apple-watch-se-3">Best value smartwatch: <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3</a> </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:2695px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cqqXHXhca6NSb5cHYHfMjm" name="AW-SE3-01" alt="Apple Watch SE 3" src="https://cdn.mos.cms.futurecdn.net/cqqXHXhca6NSb5cHYHfMjm.jpg" mos="" align="middle" fullscreen="" width="2695" height="1516" 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>You’d be hard-pressed to find a <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">better smartwatch</a> bargain than the latest entry-level Apple Watch SE 3 for $249. Not only is it Apple’s easiest-wearing smartwatch, but it also has nearly all the same features as its much pricier siblings. These include an always-on display, on-device Siri, FDA-cleared sleep apnea detection, a daily sleep score with detailed sleep reports, tons of workout tracking modes, and support for all the same gesture controls, including the latest wrist flick gesture for dismissing notifications. <em>— Dan Bracaglia</em></p><h2 id="best-value-fitness-tracker-amazfit-active-2">Best value fitness tracker: <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tested-the-amazfit-active-2-7-things-you-should-know-about-my-favorite-smartwatch-under-usd100">Amazfit Active 2</a></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:2717px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="WTG5StQiZhMe2PUMZmUrCQ" name="Active2-snow-03" alt="Close-up of the Amazfit Active 2 on a user's wrist while tracking a day of snowboarding" src="https://cdn.mos.cms.futurecdn.net/WTG5StQiZhMe2PUMZmUrCQ.jpg" mos="" align="middle" fullscreen="" width="2717" height="1528" 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 Amazfit Active 2 is hands down my<a href="https://www.tomsguide.com/us/best-fitness-trackers,review-2066.html"> favorite fitness tracker</a> under $100. First and foremost, it plays nicely with both Androids and iPhones. It also features wellness and fitness tracking tools/tech normally reserved for much pricier smartwatches. These include an onboard SpO2 sensor, body temperature sensor, and GPS. Comfortable and attractively designed with a faux tachymeter bezel, the Active also features a bright and easy-to-read AMOLED screen. And even though it is somewhat limited when it comes to smart features, you do get NFC for mobile payments, decent offline navigational tools, and an onboard AI voice assistant. The Active 2 additionally supports over 160 sports tracking modes. That’s a lot of smartwatch for under a Benjamin! <em>— Dan Bracaglia</em></p><h2 id="best-value-smart-ring-ringconn-gen-2-air">Best value smart ring: <a href="https://www.tomsguide.com/wellness/smart-rings/ringconn-gen-2-air-review-this-budget-smart-ring-beats-the-oura-ring-4-in-three-big-ways">Ringconn Gen 2 Air</a></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:3600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ftKf6tmSGBTYRuNyWvjFr5" name="RingConn2Air-12" alt="Close-up of the Ringconn Gen 2 Air smart ring" src="https://cdn.mos.cms.futurecdn.net/ftKf6tmSGBTYRuNyWvjFr5.jpg" mos="" align="middle" fullscreen="" width="3600" height="2025" 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 Ringconn Gen 2 Air is my favorite wallet-friendly <a href="https://www.tomsguide.com/wellness/fitness-trackers/best-smart-rings">smart ring</a>, priced at $199 and completely subscription-free. Reasonably comfortable, with a battery that’s good for over a week — that’s better than the Oura Ring 4 — the Gen 2 Air offers comprehensive sleep-tracking insights and 24/7 vitals monitoring. While the latest Oura Ring and Samsung Galaxy Ring provide an even greater level of overall holistic insights —  including more fitness and recovery tools, as well as women’s health features — those from the Ringconn Gen 2 Air are accurate and easy to digest, making the device a perfect option for first-time smart ring buyers. <em>— Dan Bracaglia</em></p><h2 id="best-value-fitness-band-amazfit-helio-strap">Best value fitness band: <a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-helio-strap-review">Amazfit Helio Strap</a></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="ibJX8xhu4kLzChkudRvSKh" name="Amazfit_Helio_Strap_ 6.JPG" alt="the amazfit helio strap fitness tracker with a screenless design, showing the gray strap worn around the wrist and the charger" src="https://cdn.mos.cms.futurecdn.net/ibJX8xhu4kLzChkudRvSKh.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>This subscription-free alternative to the screen-less Whoop fitness tracker costs just $99. Just as comfortable with similar battery life to the pricier competition (up to 12 days for the Helio Strap), it churns out loads of sleep insights and fitness tracking metrics. And even though the automatic workout detection is a little less reliable than we’d like, this is still a seriously powerful yet discreet way to keep tabs on your well-being and/or fitness journey without breaking the bank. <em>— Dan Bracaglia</em></p><h2 id="drones">Drones</h2><h2 id="best-value-drone-potensic-atom-2">Best value drone: <a href="https://www.tomsguide.com/cameras-photography/drones/potensic-atom-2-review">Potensic Atom 2</a></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="t9j7quHUUF8obFawLDcuGh" name="Potensic_Atom2_Drone_ 14.JPG" alt="A Potensic Atom 2 drone" src="https://cdn.mos.cms.futurecdn.net/t9j7quHUUF8obFawLDcuGh.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>DJI isn’t the be-all end-all among the <a href="https://www.tomsguide.com/us/best-drones,review-2412.html">best drones</a>, of course, and the Potensic Atom 2 makes a compelling case for not just a great value dront, but also as a competent, powerful quadcopter. It’s cheaper than the aforementioned Flip but it still captures detailed 48MP stills and 4K/30fps video. This bang-for-your buck drone features an AI night mode which works well in dimly lit environments, and AI subject tracking that powers fun intelligent flight modes, such as Parallel and Spotlight. <em>— Nikita Achanta</em></p><h3 class="article-body__section" id="section-wi-fi-routers"><span>Wi-Fi routers</span></h3><h2 id="best-value-router-tp-link-archer-ge650">Best value router: <a href="https://www.tomsguide.com/computing/routers/tp-link-archer-ge650-review">TP-Link Archer GE650</a> </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q7NeezvwQoqVjFpo6eqAhM" name="TP-Link-Archer-GE650-LIST" alt="A TP-Link Archer GE650 router on a desk next to a monitor" src="https://cdn.mos.cms.futurecdn.net/Q7NeezvwQoqVjFpo6eqAhM.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p><a href="https://www.tomsguide.com/best-picks/best-gaming-routers">Gaming-centric Wi-Fi routers</a> usually come with a serious price premium, but TP-Link clearly didn’t get the memo with this monster of a Wi-Fi 7 option. While the list price is $350, it’s almost always available for $250, and for that you’re getting a fully-featured router. I’m talking multi-gig speeds, impressive signal range, top notch customization and easy-to-use security via the app, while also giving you game port forwarding to prioritize data to maximizing your online multiplayer bandwidth. <em>— Anthony Spadafora</em></p><h2 id="best-value-mesh-router-netgear-orbi-370">Best value mesh router: <a href="https://www.tomsguide.com/computing/routers/netgear-orbi-370-review-the-most-affordable-orbi-mesh-kit-yet?_gl=1*y23q56*_up*MQ..&gclid=CjwKCAiAzrbIBhA3EiwAUBaUdSt40NrI2And82tJaN5Cwe49JXz008uH8_iueDxyR_-yb6zN41cLJxoCQI4QAvD_BwE&gbraid=0AAAAAqzfqMYM897YZorurfQVv9nw8xId1">Netgear Orbi 370</a> </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="W6wQBSJSVKNPse3TSnvfDm" name="Netgear-Orbi-370--5" alt="Netgear Orbi 370 mesh router on a shelf" src="https://cdn.mos.cms.futurecdn.net/W6wQBSJSVKNPse3TSnvfDm.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Turns out one of the cheaper mesh Wi-Fi systems you can get is also one of the better options to buy in terms of pure performance and power efficiency. If you need to spread your signal out around the house, this $350 three-pack is capable of covering 6,000 square feet with Wi-Fi 7 signal. That ensures gigabit speeds at close range, and a huge range of coverage wherever you are. For something with similar specs, you could be expecting to pay at least twice the price, so this is real value for your money among the <a href="https://www.tomsguide.com/computing/routers/best-mesh-wi-fi-systems">best mesh Wi-Fi systems</a>. -<em> Jason England</em></p><h3 class="article-body__section" id="section-smart-home"><span>Smart Home</span></h3><h2 id="best-value-smart-speaker-amazon-echo-dot">Best value smart speaker: <a href="https://www.tomsguide.com/reviews/amazon-echo-dot-5th-gen">Amazon Echo Dot</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kxyJFPGWFXuCB9sU4Xkwab" name="TG_Amazon Echo Dot 5th Gen_LIST.jpg" alt="Amazon Echo Dot (5th Gen)" src="https://cdn.mos.cms.futurecdn.net/kxyJFPGWFXuCB9sU4Xkwab.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>Amazon's 5th-generation Echo Dot is a bit long in the tooth — it was released in 2022 — but, thanks to the upgrades Amazon made with Alexa+, this <a href="https://www.tomsguide.com/us/best-smart-speakers,review-4480.html">smart speaker</a> continues to deliver exceptional value three years later. In addition to its low price, it also acts as an Eero Wi-Fi satellite, and a built-in temperature sensor allows you to integrate it into your smart home routines. Yes, you'll get better sound out of more expensive speakers, but the Echo Dot is great for those times when you just want something playing in the background. <em>— Mike Prospero</em></p><h2 id="best-value-smart-plug-tp-link-tapo-smart-plug-mini">Best value smart plug: <a href="https://www.tomsguide.com/us/best-smart-plugs,review-4087.html">TP-Link Tapo Smart Plug Mini</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xnBy3jj5y8eq7qw6627z2g" name="tapo p125" alt="TP-Link Tapo P125" src="https://cdn.mos.cms.futurecdn.net/xnBy3jj5y8eq7qw6627z2g.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: TP-Link)</span></figcaption></figure><p>Our <a href="https://www.tomsguide.com/us/best-smart-plugs,review-4087.html">best value smart plug</a> is also our favorite model overall. Why? Because it delivers exceptional value for the price. It's small and well-designed and works with every major smart home platform, thanks to its integration with Matter. We connected it just as easily to Alexa as we did Apple Home. Plus, the Tapo app makes it simple to schedule; it has a vacation mode; and can even turn on and off automatically at sunrise and sunset, so it can adjust with the seasons. <em>— Mike Prospero</em></p><h2 id="best-value-security-camera-wyze-cam-v4">Best value security camera: <a href="https://www.tomsguide.com/home/smart-home/wyze-cam-v4-review-the-new-king-of-budget-security-cameras">Wyze Cam v4</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UHHacHvUQJKgA4jBcn7rx8" name="Wyze Cam v4 Her.jpg" alt="Wyze Cam v4 mounted to outdoor beam" src="https://cdn.mos.cms.futurecdn.net/UHHacHvUQJKgA4jBcn7rx8.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: Wyze)</span></figcaption></figure><p>Wyze has long made some of the <a href="https://www.tomsguide.com/best-picks/best-home-security-cameras">best home security cameras</a> for less, and the Wyze Cam V4 is a prime example. In our testing, this camera delivered great looking video both indoors and out with its 2.5 QHD resolution, and costs less than $40. But what also makes this camera a great value is that you can save video locally, so you don't necessarily need to sign up for a subscription to use it — unlike many other security cameras. <em>— Mike Prospero</em></p><h2 id="best-value-smart-lock-yale-approach">Best value smart lock: <a href="https://www.tomsguide.com/home/smart-home/yale-approach-smart-lock-review-a-great-retrofit-smart-lock">Yale Approach</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y7kpzvSBjS7uZztUeysxVW" name="Yale Install 3.jpg" alt="Yale Approach smart lock powered on" src="https://cdn.mos.cms.futurecdn.net/y7kpzvSBjS7uZztUeysxVW.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>The Yale Approach has most of the features you'll need in one of the <a href="https://www.tomsguide.com/us/best-smart-locks,review-3352.html">best smart locks</a>, all for less than $100. This smart lock takes its cues from the August Smart Lock, which means we found it easy to install. We also like the fact that it works with Alexa and Google Home (our one nitpick: no Apple Home support). As this is a retrofit lock, you'll only be replacing the inside portion of your deadbolt, so it's not apparent to visitors from the outside that you have a smart lock. You can also get this lock with or without a fingerprint reader, and if you want to unlock it using a keypad, you'll have to purchase that separately. <em>— Mike Prospero</em></p><h3 class="article-body__section" id="section-home-appliances"><span>Home appliances</span></h3><h2 id="best-value-keurig-keurig-k-mini-mate">Best value Keurig: <a href="https://www.tomsguide.com/home/coffee-makers/keurig-k-mini-mate-coffee-maker-review">Keurig K-Mini Mate</a> </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="z9P3ZaKUqWGBSzjMKHoeeg" name="Keurig K-Mini Mate-04" alt="Keurig K-Mini Mate" src="https://cdn.mos.cms.futurecdn.net/z9P3ZaKUqWGBSzjMKHoeeg.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Cute, compact and reasonably priced, if you’re looking for a Keurig coffee maker, the K-Mini Mate is a savvy choice. Even at full price, it’s very affordable, but it can also be found on sale frequently. This machine delivers everything you need from a pod coffee maker: one-touch speedy brewing, a hot cup of Joe, and it also comes in a range of fun colors. It’s the ideal first coffee maker for students or those living in smaller apartments. <em>— Millie Fender</em></p><h2 id="best-value-blender-ninja-blast-max-blender">Best value blender: <a href="https://www.tomsguide.com/home/home-appliances/ninja-blast-max-review">Ninja Blast Max Blender </a></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:1600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hgBRxUka73g3xLcEdTUEmM" name="Ninja Blast Max before smoothie listing" alt="Ninja Blast Max review" src="https://cdn.mos.cms.futurecdn.net/hgBRxUka73g3xLcEdTUEmM.jpg" mos="" align="middle" fullscreen="" width="1600" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide )</span></figcaption></figure><p>Looking for a high-quality sub-$100 blender? The Ninja Blast Max ticks a lot of boxes. In our review, we used it to blend everything from pancake batter to frozen berries, and it outperformed every other cordless blender we’ve used. It also did an excellent job of crushing ice, while its portable rechargeable base and removable drinking cup makes it ideal for taking to the gym, on trips, or even to the office. <em>— Millie Fender</em></p><h2 id="best-value-air-fryer-philips-2000-series-air-fryer">Best value air fryer: <a href="https://www.tomsguide.com/home/home-appliances/philips-2000-series-air-fryer-review">Philips 2000 Series Air Fryer</a></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="SMRBSP2S7PZafbvNpwkeJ6" name="Philips_2000series_Airfryer_.JPG" alt="philips 2000 series air fryer with a 6.6 basket and a window, a vortex grill for air circulation, 13 preset modes, and an led screen for timing and heat settings" src="https://cdn.mos.cms.futurecdn.net/SMRBSP2S7PZafbvNpwkeJ6.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>You’ll struggle to find many good air fryers for under $80, but if you’re on a budget, the brand you should try is Philips. It impresses us time and time again with its high-quality designs and premium performance, while often costing much less than alternatives from Ninja and Instant. The 2000 Series was new this year, costs under $100, and even features a fancy window which allows you to watch your food as it cooks. For the price, it doesn’t get much better. <em>— Millie Fender</em></p><h2 id="best-value-espresso-machine-casabrews-3700-essential">Best value espresso machine: <a href="https://www.tomsguide.com/home/coffee-makers/casabrews-3700-essential-review">Casabrews 3700 Essential</a></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="V6Z6q4MHTNFaLfZGcaM7kB" name="casabrews_3700_.JPG" alt="the casabrews 3700 essential espresso machine photographed against a blue background in stainless steel" src="https://cdn.mos.cms.futurecdn.net/V6Z6q4MHTNFaLfZGcaM7kB.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>In the world of espresso machines, it doesn’t get much cheaper than the Casabrews 3700 Essential. But with its steel-colored exterior, single and double shot buttons, and surprisingly capable steam wand, it can more than hold its own against machines two or three times the price. Reviewer Erin said it best: “if you want an espresso machine for as little money as possible, the Casabrews 3700 Essential really is the best option.” <em>— Millie Fender</em></p><h2 id="best-value-ice-cream-maker-cuisinart-fastfreeze">Best value ice cream maker: <a href="https://www.tomsguide.com/home/kitchen-dining/cuisinart-fastfreeze-ice-cream-maker-review">Cuisinart FastFreeze</a></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:1600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="inqCpYKEX89iMeZAzyT5FM" name="Cuisinart Freeze Wand listing" alt="Cuisinart FastFreeze" src="https://cdn.mos.cms.futurecdn.net/inqCpYKEX89iMeZAzyT5FM.jpg" mos="" align="middle" fullscreen="" width="1600" height="900" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The FastFreeze is a Ninja Creami contender that more than holds its own. It’s compact, (comparatively) quiet, and capable of churning some seriously tasty ice cream from scratch. We were seriously wowed by just how affordable this machine is, awarding it a rare five stars in our <a href="https://www.tomsguide.com/home/kitchen-dining/cuisinart-fastfreeze-ice-cream-maker-review">FastFreeze review</a>. If you want to get in on the homemade ice cream trend on a budget, it’s a no-fuss option that delivers every time. <em>— Millie Fender</em></p><h3 class="article-body__section" id="section-robot-vacuums"><span>Robot vacuums</span></h3><h2 id="best-value-robot-vacuum-tp-link-tapo-rv30-max-plus">Best value robot vacuum: <a href="https://www.tomsguide.com/home/tp-link-tapo-rv30-max-plus-review">TP-Link Tapo RV30 Max Plus</a></h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="fS3FPkvBzAjDzLGckEkToH" name="tp-link-tapo-rv30-max-plus-5-LIST" alt="TP-Link Tapo RV30 Max Plus on carpet floor" src="https://cdn.mos.cms.futurecdn.net/fS3FPkvBzAjDzLGckEkToH.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>For those not looking to splurge on a robot mop hybrid, the Tapo RV30 is a great budget-friendly pick. We were impressed by its overall performance, particularly on hard floors, where it quickly handled larger debris such as cereal and kitty litter. It also mops away light stains and dirt in no time, despite not having water tanks. It may not have all the fancy mod-cons or features, but the Tapo RV30 is one of the best, cheapest robot vacuums that will get the job done well. <em>— Cynthia Lawrence</em></p><h2 id="best-value-robot-vacuum-mop-switchbot-k11-robot-vacuum-and-mop">Best value robot vacuum/mop: <a href="https://www.tomsguide.com/home/smart-home/switchbot-k11-robot-vacuum-review">SwitchBot K11 Robot Vacuum and Mop</a></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:3675px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="W4MFU8GV2ENtrB9suoXLXD" name="SwitchBot K11+ Robot Vacuum_LIST" alt="SwitchBot K11+ Robot Vacuum review" src="https://cdn.mos.cms.futurecdn.net/W4MFU8GV2ENtrB9suoXLXD.jpg" mos="" align="middle" fullscreen="" width="3675" height="2067" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Despite its small stature and value price, this robot vacuum and mop hybrid did a great job at cleaning. In our tests, it impressed us with its pet hair suction and managed to pick up every last bit of debris, both on hardwood and carpet. Its only downfall was its mop deep cleaning and inconsistent mapping. However, it excels in light cleaning, and its miniature size makes it perfect for smaller homes. <em>— Cynthia Lawrence</em></p><h2 id="best-value-stick-vacuum-dreame-r10-pro-cordless-vacuum">Best value stick vacuum: <a href="https://www.tomsguide.com/home/home-appliances/dreame-r10-pro-review">Dreame R10 Pro Cordless Vacuum</a></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="MoVCRFmk8LgZHhYWAioDFL" name="Dreame_R10_Pro_vacuum_.JPG" alt="A black and gold Dreame R10 Pro cordless vacuum cleaner" src="https://cdn.mos.cms.futurecdn.net/MoVCRFmk8LgZHhYWAioDFL.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>If you don’t have the budget for a Dyson but are still after exceptional power, the Dreame R10 Pro cordless is a somewhat surprising contender. Its design may look basic, but it's incredibly lightweight, easy to use, and can suck up just about anything off hardwood and carpets. Despite not having a display to see your settings, we liked its bright, LED floor lights to easily see under the sofa, and the bendable crevice gets into hard-to-reach places. Plus, it has a long-lasting battery at just over an hour. Priced under $250, this makes it a worthwhile investment. <em>— Cynthia Lawrence</em></p><h3 class="article-body__section" id="section-home-office"><span>Home office</span></h3><h2 id="best-value-standing-desk-uplift-v3">Best value standing desk: <a href="https://www.tomsguide.com/home/home-office/uplift-v3-standing-desk-review">Uplift V3</a> </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="xgWA6fqMhvLpCiPqCTP2TM" name="Uplift V3--06" alt="An overhead view of a desk setup built around the Uplift V3 standing desk" src="https://cdn.mos.cms.futurecdn.net/xgWA6fqMhvLpCiPqCTP2TM.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Uplift V3 is a highly refined standing desk that builds on the solid foundation of its predecessor. To make things easier, Uplift Desk has simplified the assembly process while also adding a new, wider cable management tray. Not only is one included with every desk but it’s now flexible and highly adjustable, which allows it to easily accommodate a large powerstrip and several bulky power adapters too. If you’re after a solid and extremely stable standing desk you’ll be able to use for years to come and adapt to the task at hand, the Uplift V3 is an excellent investment for your workspace and your productivity. <em>— Anthony Spadafora</em></p><h2 id="best-value-office-chair-branch-aire-chair">Best value office chair: <a href="https://www.tomsguide.com/home/home-office/branch-aire-chair-review">Branch Aire Chair</a> </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="muHpaZpg3HhwbjocFUAJRh" name="Branch Aire Chair-03" alt="The Branch Aire Chair in front of a desk" src="https://cdn.mos.cms.futurecdn.net/muHpaZpg3HhwbjocFUAJRh.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The Branch Aire Chair has a premium look and feel to it despite its mid-range price. This all-mesh office chair is easy to assemble, comes with an optional headrest included and you get great support from its adaptive tilt and zoned mesh. The Branch Aire Chair also features a weight-activated mechanism you rarely find at this price that allows the chair to adapt to your body’s movements throughout the day. While you aren’t getting dedicated lumbar support and its recline is somewhat limited, this is a fantastic and sleek-looking chair that will keep you cool while working without breaking the bank. <em>— Anthony Spadafora</em></p><h3 class="article-body__section" id="section-sleep-mattress"><span>Sleep/Mattress</span></h3><h2 id="best-value-mattress-dreamcloud-classic-hybrid-mattress">Best value mattress: <a href="https://www.tomsguide.com/reviews/dreamcloud-mattress">DreamCloud Classic Hybrid Mattress</a></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="mWMdx7B8ogHcD2SbjmGDQ8" name="DreamCloud Classic hybrid mattress" alt="The image shows the DreamCloud Classic hybrid mattress on a wooden bed frame in a blue bedroom" src="https://cdn.mos.cms.futurecdn.net/mWMdx7B8ogHcD2SbjmGDQ8.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 DreamCloud is the second highest-scoring mattress we’ve tested, beating many luxury rivals. That’s impressive considering you can buy a queen DreamCloud Classic Hybrid for under $700 – that’s $1,100 cheaper than our <a href="https://www.tomsguide.com/best-picks/best-mattresses">best mattress</a> of the year, the Saatva Classic. The DreamCloud delivers excellent comfort and support for a range of body types and sleeping positions, except for heavier weight stomach sleepers (see the Siena Signature below). It’s also breathable and safe for hot sleepers. If you want a luxury <a href="https://www.tomsguide.com/best-picks/best-hotel-mattresses">hotel mattress</a> but have a smaller budget, the DreamCloud is an excellent mid-range alternative. No mattress delivers more bang for your buck for most sleepers than this one. <em>— Claire Davies</em></p><h2 id="best-value-sleep-tracker-withings-sleep-analyzer">Best value sleep tracker: <a href="https://www.tomsguide.com/wellness/sleep-tech/withings-sleep-analyzer-review">Withings Sleep Analyzer</a></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:5120px;"><p class="vanilla-image-block" style="padding-top:42.19%;"><img id="V5sWtiai6T8x8EcSxUjreT" name="Withings Sleep Analyzer hero" alt="Grey Withings sleep tracking mat on white mattress" src="https://cdn.mos.cms.futurecdn.net/V5sWtiai6T8x8EcSxUjreT.jpg" mos="" align="middle" fullscreen="" width="5120" height="2160" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Instead of constantly wearing a smart ring or watch, this pad from Withings simply slips underneath your mattress to track your sleep, before sending the data directly to your phone. And after <a href="https://www.tomsguide.com/wellness/sleep-tech/withings-sleep-analyzer-review">reviewing the Withings Sleep Analyzer</a>, we think it’s certainly one of the <a href="https://www.tomsguide.com/wellness/sleep-tech/best-sleep-tracker">best sleep trackers</a> of the year. Priced at $199 at Withings, we compared its data with the more expensive Oura Ring 4 (a smart ring that retails at $349) and found it was consistently accurate (aside from a few times it thought lounging in bed was a daytime nap). For a sleep tracker that can <a href="https://pubmed.ncbi.nlm.nih.gov/33590821/">accurately identify sleep apnea</a>, we think this device is an excellent value.<em> — Lauren Jeffries</em></p><h2 id="best-value-sunrise-alarm-clock-dreamegg-sunrise-alarm-clock">Best value sunrise alarm clock: <a href="https://www.tomsguide.com/wellness/sleep-tech/hatch-restore-3-vs-dreamegg-sunrise-alarm-clock">DreamEgg Sunrise Alarm Clock</a></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="TyBXfMrURuYJ2a49uU7cUh" name="Dreamegg Sunrise Alarm Clock" alt="Dreamegg Sunrise Alarm Clock" src="https://cdn.mos.cms.futurecdn.net/TyBXfMrURuYJ2a49uU7cUh.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>The DreamEgg is a high-quality smart alarm, complete with great sunrise simulation and sleep sounds, that’s over $100 cheaper than the premium alarm clocks offered by tech brands such as Hatch and Lumie. In our <a href="https://www.tomsguide.com/wellness/sleep-tech/dreamegg-sunrise-alarm-clock-review">DreamEgg review</a>, we loved how the smart alarm is fully functional without a phone or app, with the essential buttons located on top of the clock. Plus it’s free of any pesky subscriptions, and the neutral color scheme looks chic and modern on your nightstand. <em>— Eve Davies</em></p><h2 id="best-value-pillow-coop-sleep-goods-original-adjustable-pillow">Best value pillow: <a href="https://www.tomsguide.com/mattresses/pillows-bedding/coop-sleep-goods-original-adjustable-pillow-review">Coop Sleep Goods Original Adjustable Pillow</a> </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:4000px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="B7kwFqBWz27dnDbMv3qngL" name="Coop Sleep Goods Adjustable Latex Pillow" alt="Coop Sleep Goods Adjustable Latex Pillow" src="https://cdn.mos.cms.futurecdn.net/B7kwFqBWz27dnDbMv3qngL.jpg" mos="" align="middle" fullscreen="" width="4000" height="2252" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Alison Barretta)</span></figcaption></figure><p>It’s unlikely that you can ever go wrong with the Coop Original Adjustable pillow. With a memory foam and microfiber fill mimicking natural down-like comfort and support and a fully adjustable build, it’s suitable for all sleeping positions and body types. It also comes with a super breathable cover made of Lulltra fabric (a blend of bamboo viscose rayon and polyester) which can work well for most hot sleepers too (or you can go for their Cool+ variant). At $85 for a standard size including a 100-night trial, 5-year warranty and free shipping, this is simply the <a href="https://www.tomsguide.com/best-picks/best-pillow">best pillow</a> you can get your hands on right now.<em> — Becky George</em></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon just announced a huge delivery upgrade affecting 2,300 US cities ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/amazon-just-announced-a-huge-delivery-upgrade-affecting-2-300-us-cities</link>
                                                                            <description>
                            <![CDATA[ Amazon has expanded its same-day grocery delivery to more than 2,300 cities since rolling out the feature in August. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CzE76tHVvw9jGcBq6iZGUf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kkLo3iNH2aC29hqAUqLLsk-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 14 Dec 2025 18:59:48 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating. She&#039;s also a puzzle fan and can often be found contributing to the NYT Connections coverage on Tom&#039;s Guide &lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/kkLo3iNH2aC29hqAUqLLsk-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon gift card]]></media:description>                                                            <media:text><![CDATA[Amazon gift card]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon gift card]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kkLo3iNH2aC29hqAUqLLsk-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Christmas came early for Amazon Prime members. Amazon <a href="https://www.aboutamazon.com/news/retail/amazon-same-day-fresh-grocery-delivery-united-states" target="_blank">announced this week</a> it's expanding its same-day grocery delivery service to more than 2,300 cities. Initially, same-day grocery delivery was limited to about 1,000 cities, including all the usual hubs like Seattle, Los Angeles, Dallas, Chicago, Miami, and New York City. Now more Prime members than ever can get fresh produce and other kitchen staples delivered to their doorstep. </p><p>“This expanded offering is supported by continued innovation within Amazon’s Same-Day Delivery network designed to deliver more selection, faster—innovation that puts us on track to deliver at our fastest speeds ever for Prime members globally for the third year in a row,” per Amazon's news release. </p><p>Since launching the service in August, the retail giant says its perishable selection has grown by more than 30 percent, including thousands of fresh favorites from Whole Foods Market. Fresh groceries now make up nine of the 10 most-ordered items for same-day delivery in eligible areas, according to the news release. For those wondering, toilet paper was the 10th item, which is not surprising for anyone who remembers the rampant hoarding of early pandemic days. The company's best-selling item for same-day delivery overall has been bananas, with avocados, strawberries, Honeycrisp apples, and limes not far behind. </p><p>Amazon also broke down the most popular perishable groceries ordered with same-day delivery by region, and y'all, we are not beating the stereotypes. Cold brew coffee, chicken thighs, and probiotic drinks are among the most-ordered items in the West, while shoppers in the East most often choose raw shrimp, broccoli florets, and chocolate chip muffins. In the South, Prime members are most often adding Atlantic salmon, chicken pot pie, and lemonade to their carts, while us Midwesterners are apparently ordering tons of wheat bread, smoked bacon, and pepperoni pizza  — not even deep-dish!</p><h2 id="does-my-city-have-amazon-s-same-day-grocery-delivery">Does my city have Amazon's same-day grocery delivery?</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="CXNG3T44EaeDENsr6aVUJY" name="package-at-doorstep-2.jpg" alt="Person placing an Amazon box on a doorstep" src="https://cdn.mos.cms.futurecdn.net/CXNG3T44EaeDENsr6aVUJY.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: Amazon)</span></figcaption></figure><p>If you're wondering if same-day grocery delivery is offered in your city, head on over to the Amazon website at <a href="https://www.amazon.com/fmc/learn-more" target="_blank">amazon.com/fmc/learn-more</a> to find out! Alternatively, you can log into the Amazon website or mobile app, add some grocery items to your cart, and see what delivery options are available at checkout. </p><p>Amazon didn't outline the full list of cities where same-day grocery delivery is now available, but some of the newly added markets it did confirm include:</p><ul><li>Boise, Idaho</li><li>Salt Lake City, Utah</li><li>Fort Collins, Colorado</li><li>Omaha, Nebraska</li><li>Sugar Land, Texas</li><li>Des Moines, Iowa</li><li>Kennesaw, Georgia</li><li>Gaithersburg, Maryland</li></ul><h2 id="how-much-does-amazon-s-same-day-grocery-delivery-cost">How much does Amazon's same-day grocery delivery cost?</h2><p>Amazon Prime members can get same-day delivery for free on orders of more than $25, as outlined in Amazon's news release. For orders that fall under that threshold, you'll have to pay a $2.99 delivery fee. Meanwhile, if you aren't an Amazon Prime member, same-day delivery will set you back $12.99 regardless of the total cost. </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/amazon-is-taking-up-to-71-percent-off-new-balance-running-shoes-and-sneakers-15-deals-id-shop-now">Amazon is taking up to 71% off New Balance running shoes and sneakers — 15 deals I'd shop now</a></li><li><a href="https://www.tomsguide.com/audio/smart-speakers/i-used-the-echo-dot-max-and-echo-studio-to-create-an-alexa-home-theater-heres-how-it-sounds">I used the Echo Dot Max and Echo Studio to create an Alexa Home Theater — here's how it sounds</a></li><li><a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html">The best Kindles in 2025: Our top picks tested and rated</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Design Without Limits ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/design-without-limits</link>
                                                                            <description>
                            <![CDATA[ Architect Dale Whitfield uses Snapdragon to Redefine the Studio ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">r2zsDsBC6hN4b5p2NUD9BF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PGCtMsYenqTBQwni83nvif-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 12 Dec 2025 12:00:48 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tom&#039;s Guide ]]></dc:creator>                                                                                                        <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/PGCtMsYenqTBQwni83nvif-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Architect Dale Whitfield talks about his experience with Snapdragon products]]></media:description>                                                            <media:text><![CDATA[Architect Dale Whitfield talks about his experience with Snapdragon products]]></media:text>
                                <media:title type="plain"><![CDATA[Architect Dale Whitfield talks about his experience with Snapdragon products]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PGCtMsYenqTBQwni83nvif-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div class="ceros-embed-wrapper">        <div style="position: relative;width: auto;padding: 0 0 363.54% ;height: 0;top: 0;left: 0;bottom: 0;right: 0;margin: 0;border: 0 none"        id="experience-69259377d88c4" data-aspectratio="0.27507163" data-mobile-aspectratio="">        <iframe        allowfullscreen        src="https://view.ceros.com/dennis/toms-guide-snapdragon-design-without-limits?heightOverride=6980"        style="position: absolute;top: 0;left: 0;bottom: 0;right: 0;margin: 0;padding: 0;border: 0 none;height: 1px;width: 1px;min-height: 100%;min-width: 100%"        frameborder="0" class="ceros-experience" title="Snapdragon x Tom's Guide | Platinum Advertorial | Nov 25"        scrolling="no"></iframe>    </div>    <script type="text/javascript" src="https://view.ceros.com/scroll-proxy.min.js" data-ceros-origin-domains="view.ceros.com"></script></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Pocket rocket! This tiny 10,000mAh power bank fits in any pocket and is 32% off right now for Black Friday  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/pocket-rocket-this-tiny-10-000mah-power-bank-fits-in-any-pocket-and-is-32-percent-off-right-now-for-black-friday</link>
                                                                            <description>
                            <![CDATA[ The Iniu Mini Power Bank crams a 10,000mAh battery into a tiny package, keeping you charged on the go. And right now it's 32% off for Black Friday. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LL4vYBmoLsU3aehbqBeMdA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9QjwgzaWrVNZiWzYbw6qp-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 26 Nov 2025 13:12:28 +0000</pubDate>                                                                                                                                <updated>Wed, 26 Nov 2025 13:28:39 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ peter.wolinski@futurenet.com (Peter Wolinski) ]]></author>                    <dc:creator><![CDATA[ Peter Wolinski ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/stgPfXWY7ukw8J8rfC7vjg.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Peter is a Senior Editor at Tom&#039;s Guide, heading up the site&#039;s Reviews team and Cameras section. Having built gaming PCs since he was 10 (that&#039;s a while ago now) he&#039;s a bit of a nerd about components and hardware. He&#039;s also been an iPhone user since the classic iPhone 4, and a Mac user for well over a decade. Experienced in using and testing all kinds of technology — from phones through to tablets, computers, games consoles, cameras and smart home tech — helping people find the best tech for them (at the best prices) is what Peter does best. A photographer since he bought his first camera (a Fujifilm) in 2015, Peter was previously an Editor for Canon-Europe.com. He then edited the Cameras and How To sections of Tom&#039;s Guide. When he&#039;s not crafting helpful, in-depth reviews, Peter can usually be found out and about honing his architectural photography skills, riding his motorcycle around Welsh mountain roads, telling everyone about his two greyhounds, squeezing a few extra FPS out of PC games or perfecting his espresso shots.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/9QjwgzaWrVNZiWzYbw6qp-1280-80.jpg">
                                                            <media:credit><![CDATA[Iniu / Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Iniu Pocket Rocket portable charger in hand, against a pink background, with a Tom&#039;s Guide deal badge on the left of the image.]]></media:description>                                                            <media:text><![CDATA[The Iniu Pocket Rocket portable charger in hand, against a pink background, with a Tom&#039;s Guide deal badge on the left of the image.]]></media:text>
                                <media:title type="plain"><![CDATA[The Iniu Pocket Rocket portable charger in hand, against a pink background, with a Tom&#039;s Guide deal badge on the left of the image.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9QjwgzaWrVNZiWzYbw6qp-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/live/news/black-friday-amazon-deals-2025-top-discounts">Black Friday deals</a> are here, meaning you can save big on great tech. This deal right here has to be one of my favorites so far. Right now, the tiny (but mighty) <a href="https://www.amazon.com/INIU-Portable-10000mAh-Essentials-Powerbank/dp/B0DQD35SQ4" target="_blank" rel="nofollow">Iniu Mini Power Bank is 32% off at Amazon for Black Friday</a>. At $26, this is the cheapest it's ever been.</p><p>This mini pocket rocket takes one of the top spots on our <a href="https://www.tomsguide.com/best-picks/best-portable-chargers">best power banks</a> guide, and for good reason. I've been using this little charger for a few months now, and I absolutely love it. So it's well worth snapping up this deal.</p><div class="product"><a data-dimension112="d6573453-cd35-4804-8670-d0a7345123dd" data-action="Deal Block" data-label="10,000mAh capacity, 45W PD charging, a USB-C cable that doubles as a wrist strap, and all in a super-compact shell that fits into virtually any pocket. What more do youi want? "32% off for Black Friday" I hear you say? Well, you're in luck." data-dimension48="10,000mAh capacity, 45W PD charging, a USB-C cable that doubles as a wrist strap, and all in a super-compact shell that fits into virtually any pocket. What more do youi want? "32% off for Black Friday" I hear you say? Well, you're in luck." data-dimension25="$26" href="https://www.amazon.com/INIU-Portable-10000mAh-Essentials-Powerbank/dp/B0DQD35SQ4" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1245px;"><p class="vanilla-image-block" style="padding-top:120.48%;"><img id="4t4fPy7ZKkbYpNPW7zi3yL" name="Iniu Mini Portable Power Bank" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4t4fPy7ZKkbYpNPW7zi3yL.jpg" mos="" align="middle" fullscreen="" width="1245" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>10,000mAh capacity, 45W PD charging, a USB-C cable that doubles as a wrist strap, and all in a super-compact shell that fits into virtually any pocket. What more do youi want? "32% off for Black Friday" I hear you say? Well, you're in luck.<a class="view-deal button" href="https://www.amazon.com/INIU-Portable-10000mAh-Essentials-Powerbank/dp/B0DQD35SQ4" target="_blank" rel="nofollow" data-dimension112="d6573453-cd35-4804-8670-d0a7345123dd" data-action="Deal Block" data-label="10,000mAh capacity, 45W PD charging, a USB-C cable that doubles as a wrist strap, and all in a super-compact shell that fits into virtually any pocket. What more do youi want? "32% off for Black Friday" I hear you say? Well, you're in luck." data-dimension48="10,000mAh capacity, 45W PD charging, a USB-C cable that doubles as a wrist strap, and all in a super-compact shell that fits into virtually any pocket. What more do youi want? "32% off for Black Friday" I hear you say? Well, you're in luck." data-dimension25="$26">View Deal</a></p></div><div class="product"><a data-dimension112="e1a7699d-2b03-4491-8d96-0e2b91a5a0d4" data-action="Deal Block" data-label="My fellow Brits aren't left out on the action either! The Iniu Mini Portable Charger is also on sale in the U.K. for Black Friday. A real bobby dazzler of a deal." data-dimension48="My fellow Brits aren't left out on the action either! The Iniu Mini Portable Charger is also on sale in the U.K. for Black Friday. A real bobby dazzler of a deal." data-dimension25="£28.49" href="https://www.amazon.co.uk/INIU-Charging-10000mAh-Battery-Portable/dp/B0DQD385HN" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1245px;"><p class="vanilla-image-block" style="padding-top:120.48%;"><img id="4t4fPy7ZKkbYpNPW7zi3yL" name="Iniu Mini Portable Power Bank" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4t4fPy7ZKkbYpNPW7zi3yL.jpg" mos="" align="middle" fullscreen="" width="1245" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>My fellow Brits aren't left out on the action either! The Iniu Mini Portable Charger is also on sale in the U.K. for Black Friday. A real bobby dazzler of a deal.<a class="view-deal button" href="https://www.amazon.co.uk/INIU-Charging-10000mAh-Battery-Portable/dp/B0DQD385HN" target="_blank" rel="nofollow" data-dimension112="e1a7699d-2b03-4491-8d96-0e2b91a5a0d4" data-action="Deal Block" data-label="My fellow Brits aren't left out on the action either! The Iniu Mini Portable Charger is also on sale in the U.K. for Black Friday. A real bobby dazzler of a deal." data-dimension48="My fellow Brits aren't left out on the action either! The Iniu Mini Portable Charger is also on sale in the U.K. for Black Friday. A real bobby dazzler of a deal." data-dimension25="£28.49">View Deal</a></p></div><h2 id="tiny-but-mighty">Tiny but mighty</h2><p>As I mentioned above, I love this little power bank. I got hold of mine a couple of months back and, initially, I just left it on my desk. I didn't <em><strong>need</strong></em> a 10,000mAh power bank, as I already had a 20,000mAh one in my bag that can charge laptops, tablets and phones.</p><p>My big power bank is just that, though: big! A few weeks after getting the Iniu, I was set to go on a motorcycle trip where space is at a premium. I needed a power bank that would fit seamlessly into one my of bike jacket's very small pockets. And suddenly, the Iniu came into its own! It fit perfectly.</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:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6h5fsTWWJnGWcR6LZWR6dm" name="Iniu mini power bank 1" alt="A sage green Iniu Mini Power Bank in hand." src="https://cdn.mos.cms.futurecdn.net/6h5fsTWWJnGWcR6LZWR6dm.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>On the trip, the Iniu was so tiny that I could fit it into another pocket alongside my <a href="https://www.tomsguide.com/cameras-photography/gopro-action-cameras/gopro-max2-review">GoPro MAX2</a> to charge while I was riding. Now that winter has hit, I've purchased a heated vest to go under my riding jacket, which can be powered via USB-C. No need to guess what I'll be using to do that!</p><p>I also use the Iniu regularly for charging my <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-pro-review">iPhone 17 Pro</a>, which it does pretty quickly thanks to 45W PD charging. 10 minutes gets me about 20%, so on an average motorcycle pit stop I can easily put back 50-60% battery.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4032px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="52wtTuTwimvy3kCntsVCjm" name="Iniu mini power bank 2" alt="A sage green Iniu Mini Power Bank charging a GoPro MAX2 on a wodden surface." src="https://cdn.mos.cms.futurecdn.net/52wtTuTwimvy3kCntsVCjm.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>You don't need to worry about carrying a USB-C cable with you, either. The Iniu's carry strap <strong>is</strong> its USB-C cable. It locks into place when clipped into the wrist strap holder, making for a secure strap, but when removed is a braided cable that's short enough to not get in the way. </p><p>You also get three outputs (2x USB-C, 1x USB-A) and a bright digital readout that tells you how much battery capacity remains. All in all, I can't recommend this little charger enough. I'd happily buy it at full price, so with this deal, it's a no-brainer!</p><p><em>For more killer deals on tech, check out our </em><a href="https://www.tomsguide.com/live/news/black-friday-deals-live-2025-amazon-walmart-target"><em>Black Friday deals live blog</em></a><em>.</em></p><h2 class="article-body__section" id="section-shop-today-s-best-black-friday-deals"><span>Shop today's best Black Friday deals</span></h2><ul><li><strong>Amazon: </strong><a href="https://www.amazon.com/b?node=210998206011" target="_blank" rel="nofollow"><strong>50% off Ring, Ninja, Under Armour and more</strong></a><strong></strong></li><li><strong>REI: </strong><a href="https://www.rei.com/f/scd-deals" target="_blank" rel="nofollow"><strong>half-off Arc'teryx, Patagonia and more</strong></a><strong></strong></li><li><strong>Walmart: </strong><a href="https://www.walmart.com/cp/gifts/3131907" target="_blank" rel="nofollow"><strong>holiday gifts from $15</strong></a><strong></strong></li><li><strong>Dell: </strong><a href="https://www.dell.com/en-us/shop/deals?sortBy=price-ascending" target="_blank" rel="nofollow"><strong>monitors from $69, laptops from $249</strong></a><strong></strong></li><li><strong>Nectar: </strong><a href="https://www.nectarsleep.com/" target="_blank" rel="nofollow"><strong>50% off mattresses + 66% off bundles</strong></a></li><li><strong>Best Buy: </strong><a href="https://www.bestbuy.com/site/all-electronics-on-sale/all-computers-tablets-on-sale/pcmcat1632941704767.c?id=pcmcat1632941704767" target="_blank" rel="nofollow"><strong>laptops from $149</strong></a><strong></strong></li><li><strong>Lenovo: </strong><a href="https://www.lenovo.com/us/en/d/deals/laptops/?IPromoID=LEN380027&sortBy=priceUp" target="_blank" rel="nofollow"><strong>doorbuster laptop deals from $319</strong></a><strong></strong></li><li><strong>Wayfair: </strong><a href="https://www.wayfair.com/daily-sales" target="_blank" rel="nofollow"><strong>up to 80% off home decor</strong></a><strong></strong></li><li><strong>Nike: </strong><a href="https://www.nike.com/w/sale-3yaep?sortBy=priceAsc" target="_blank" rel="nofollow"><strong>apparel/sneakers from $7</strong></a><strong></strong></li><li><strong>Lululemon: </strong><a href="https://shop.lululemon.com/c/we-made-too-much/n18mhd?Ns=price%7C0" target="_blank" rel="nofollow"><strong>top picks from $9</strong></a><strong></strong></li><li><strong>Birkenstock: </strong><a href="https://www.nordstrom.com/browse/sale?sort=PercentOff&filterByBrand=birkenstock" target="_blank" rel="nofollow"><strong>deals from $20 @ Nordstrom</strong></a><strong></strong></li><li><strong>Saatva: </strong><a href="https://www.saatva.com/mattresses/saatva-classic?utm_source=futurepublishing&utm_medium=affiliate&coupon=awyqqgzvxqicebab" target="_blank" rel="nofollow"><strong>luxury mattresses from $1,099</strong></a><strong></strong></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 11 tech gifts that blew us away in 2025, from MacBooks to Xbox handhelds ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/11-tech-gifts-that-blew-us-away-in-2025-from-macbooks-to-xbox-handhelds</link>
                                                                            <description>
                            <![CDATA[ Make someone’s Christmas ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2sLdYXkUQbQw4hLMYkkBC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6YcbKy49DDzyKbiNDEPNsP-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 11 Nov 2025 16:48:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/6YcbKy49DDzyKbiNDEPNsP-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[tech gifts]]></media:description>                                                            <media:text><![CDATA[tech gifts]]></media:text>
                                <media:title type="plain"><![CDATA[tech gifts]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6YcbKy49DDzyKbiNDEPNsP-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>While the Sleigh Bells will be ringing soon, there’s the small matter of Black Friday in between. It’s always a challenge (the fun kind) to stay on top of the year’s best tech, but that’s exactly what we do at Tom’s Guide - and 2025 has been packed with fun new tech gifts to buy!</p><p>From handheld PC/console hybrids, to sleek keyboards and shimmering smart lights, a lot of tech blew us away this year. And because of that, they are some incredible picks for present ideas for loved ones - or for yourself. Go on, you’ve earned it.</p><h3 class="article-body__section" id="section-our-favorite-tech-gifts"><span>Our Favorite Tech Gifts</span></h3><div class="product"><a data-dimension112="7bfc45a6-c631-444c-a5f0-c33a1405fc3a" data-action="Deal Block" data-label="Apple MacBook Air (M4)Apple is in the enviable position of being able to release great laptops every year with incremental performance bumps, but this one comes with a slight price cut alongside the improved M4 chip. There&rsquo;s no exterior change here from the M3 model, but it remains an excellent, ultra-portable laptop with a great battery and a machine that nails every fundamental aspect of Mac computing. Apple MacBook Air (M4)" data-dimension48="Apple MacBook Air (M4)Apple is in the enviable position of being able to release great laptops every year with incremental performance bumps, but this one comes with a slight price cut alongside the improved M4 chip. There&rsquo;s no exterior change here from the M3 model, but it remains an excellent, ultra-portable laptop with a great battery and a machine that nails every fundamental aspect of Mac computing. Apple MacBook Air (M4)" data-dimension25="$" href="https://www.amazon.com/Apple-2025-MacBook-13-inch-Laptop/dp/B0DZD9S5GC" 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="jaozhA6DUqwVKiykJv3KGG" name="macbook air m4  13inch" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/jaozhA6DUqwVKiykJv3KGG.png" mos="" align="middle" fullscreen="" width="1000" height="1000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.amazon.com/Apple-2025-MacBook-13-inch-Laptop/dp/B0DZD9S5GC" target="_blank" rel="nofollow" data-dimension112="7bfc45a6-c631-444c-a5f0-c33a1405fc3a" data-action="Deal Block" data-label="Apple MacBook Air (M4)Apple is in the enviable position of being able to release great laptops every year with incremental performance bumps, but this one comes with a slight price cut alongside the improved M4 chip. There&rsquo;s no exterior change here from the M3 model, but it remains an excellent, ultra-portable laptop with a great battery and a machine that nails every fundamental aspect of Mac computing. Apple MacBook Air (M4)" data-dimension48="Apple MacBook Air (M4)Apple is in the enviable position of being able to release great laptops every year with incremental performance bumps, but this one comes with a slight price cut alongside the improved M4 chip. There&rsquo;s no exterior change here from the M3 model, but it remains an excellent, ultra-portable laptop with a great battery and a machine that nails every fundamental aspect of Mac computing. Apple MacBook Air (M4)" data-dimension25="$"><strong>Apple MacBook Air (M4)</strong></a><br>Apple is in the enviable position of being able to release great laptops every year with incremental performance bumps, but <a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review">this one</a> comes with a slight price cut alongside the improved M4 chip. There’s no exterior change here from the M3 model, but it remains an excellent, ultra-portable laptop with a great battery and a machine that nails every fundamental aspect of Mac computing.<a class="view-deal button" href="https://www.amazon.com/Apple-2025-MacBook-13-inch-Laptop/dp/B0DZD9S5GC" target="_blank" rel="nofollow" data-dimension112="7bfc45a6-c631-444c-a5f0-c33a1405fc3a" data-action="Deal Block" data-label="Apple MacBook Air (M4)Apple is in the enviable position of being able to release great laptops every year with incremental performance bumps, but this one comes with a slight price cut alongside the improved M4 chip. There&rsquo;s no exterior change here from the M3 model, but it remains an excellent, ultra-portable laptop with a great battery and a machine that nails every fundamental aspect of Mac computing. Apple MacBook Air (M4)" data-dimension48="Apple MacBook Air (M4)Apple is in the enviable position of being able to release great laptops every year with incremental performance bumps, but this one comes with a slight price cut alongside the improved M4 chip. There&rsquo;s no exterior change here from the M3 model, but it remains an excellent, ultra-portable laptop with a great battery and a machine that nails every fundamental aspect of Mac computing. Apple MacBook Air (M4)" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="3734ad6c-680e-42fe-93f7-d27e6d65dd48" data-action="Deal Block" data-label="Asus ROG Xbox Ally XMicrosoft&rsquo;s long-awaited foray into the handheld gaming PC space comes arm-in-arm with ASUS, but if your gaming library is spread across Steam, Battle Net, the Xbox PC app and more, then you&rsquo;re in luck. Not only is the ROG Xbox Ally X a powerhouse, but it&rsquo;s essentially a one-stop shop that can boot into all of those PC launchers without feeling too much like, well, a PC. Asus ROG Xbox Ally X" data-dimension48="Asus ROG Xbox Ally XMicrosoft&rsquo;s long-awaited foray into the handheld gaming PC space comes arm-in-arm with ASUS, but if your gaming library is spread across Steam, Battle Net, the Xbox PC app and more, then you&rsquo;re in luck. Not only is the ROG Xbox Ally X a powerhouse, but it&rsquo;s essentially a one-stop shop that can boot into all of those PC launchers without feeling too much like, well, a PC. Asus ROG Xbox Ally X" data-dimension25="$" href="https://www.bestbuy.com/product/rog-xbox-ally-x-7-fhd-120hz-gaming-handheld-amd-ryzen-ai-z2-extreme-processor-24gb-with-1tb-ssd-windows/JJGHGPLVHW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="548UpWLbfBsamCE78PxvGd" name="Xbox Ally X" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/548UpWLbfBsamCE78PxvGd.jpg" mos="" align="middle" fullscreen="" width="900" height="900" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.bestbuy.com/product/rog-xbox-ally-x-7-fhd-120hz-gaming-handheld-amd-ryzen-ai-z2-extreme-processor-24gb-with-1tb-ssd-windows/JJGHGPLVHW" target="_blank" rel="nofollow" data-dimension112="3734ad6c-680e-42fe-93f7-d27e6d65dd48" data-action="Deal Block" data-label="Asus ROG Xbox Ally XMicrosoft&rsquo;s long-awaited foray into the handheld gaming PC space comes arm-in-arm with ASUS, but if your gaming library is spread across Steam, Battle Net, the Xbox PC app and more, then you&rsquo;re in luck. Not only is the ROG Xbox Ally X a powerhouse, but it&rsquo;s essentially a one-stop shop that can boot into all of those PC launchers without feeling too much like, well, a PC. Asus ROG Xbox Ally X" data-dimension48="Asus ROG Xbox Ally XMicrosoft&rsquo;s long-awaited foray into the handheld gaming PC space comes arm-in-arm with ASUS, but if your gaming library is spread across Steam, Battle Net, the Xbox PC app and more, then you&rsquo;re in luck. Not only is the ROG Xbox Ally X a powerhouse, but it&rsquo;s essentially a one-stop shop that can boot into all of those PC launchers without feeling too much like, well, a PC. Asus ROG Xbox Ally X" data-dimension25="$"><strong>Asus ROG Xbox Ally X</strong></a><br>Microsoft’s long-awaited foray into the handheld gaming PC space comes arm-in-arm with ASUS, but if your gaming library is spread across Steam, Battle Net, the Xbox PC app and more, then you’re in luck. Not only is the <a href="https://www.tomsguide.com/gaming/handheld-gaming/rog-xbox-ally-x-review">ROG Xbox Ally X</a> a powerhouse, but it’s essentially a one-stop shop that can boot into all of those PC launchers without feeling too much like, well, a PC. <a class="view-deal button" href="https://www.bestbuy.com/product/rog-xbox-ally-x-7-fhd-120hz-gaming-handheld-amd-ryzen-ai-z2-extreme-processor-24gb-with-1tb-ssd-windows/JJGHGPLVHW" target="_blank" rel="nofollow" data-dimension112="3734ad6c-680e-42fe-93f7-d27e6d65dd48" data-action="Deal Block" data-label="Asus ROG Xbox Ally XMicrosoft&rsquo;s long-awaited foray into the handheld gaming PC space comes arm-in-arm with ASUS, but if your gaming library is spread across Steam, Battle Net, the Xbox PC app and more, then you&rsquo;re in luck. Not only is the ROG Xbox Ally X a powerhouse, but it&rsquo;s essentially a one-stop shop that can boot into all of those PC launchers without feeling too much like, well, a PC. Asus ROG Xbox Ally X" data-dimension48="Asus ROG Xbox Ally XMicrosoft&rsquo;s long-awaited foray into the handheld gaming PC space comes arm-in-arm with ASUS, but if your gaming library is spread across Steam, Battle Net, the Xbox PC app and more, then you&rsquo;re in luck. Not only is the ROG Xbox Ally X a powerhouse, but it&rsquo;s essentially a one-stop shop that can boot into all of those PC launchers without feeling too much like, well, a PC. Asus ROG Xbox Ally X" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="51d1aa8f-4901-4064-8c1f-10732f3fd5a8" data-action="Deal Block" data-label="Eureka Ergonomic Gaming ChairFitting in the middle of a Venn diagram between ergonomics and gaming sensibilities, the Eureka Ergonomic Gaming Chair achieves the almost impossible by doing a pretty great job at both. Its breathable backrest helps you stay focused on the game in warm situations, and it&rsquo;s easy to put together and very adjustable. Eureka Ergonomic Gaming Chair" data-dimension48="Eureka Ergonomic Gaming ChairFitting in the middle of a Venn diagram between ergonomics and gaming sensibilities, the Eureka Ergonomic Gaming Chair achieves the almost impossible by doing a pretty great job at both. Its breathable backrest helps you stay focused on the game in warm situations, and it&rsquo;s easy to put together and very adjustable. Eureka Ergonomic Gaming Chair" data-dimension25="$" href="https://www.amazon.com/EUREKA-ERGONOMIC-Adjustable-Ergonomic-Comfortable/dp/B0DXVF6PM5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1464px;"><p class="vanilla-image-block" style="padding-top:102.46%;"><img id="sJdNGLDB2y6DbEhr9KLMYM" name="Eureka Ergonomic gaming chair" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/sJdNGLDB2y6DbEhr9KLMYM.jpg" mos="" align="middle" fullscreen="" width="1464" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.amazon.com/EUREKA-ERGONOMIC-Adjustable-Ergonomic-Comfortable/dp/B0DXVF6PM5" target="_blank" rel="nofollow" data-dimension112="51d1aa8f-4901-4064-8c1f-10732f3fd5a8" data-action="Deal Block" data-label="Eureka Ergonomic Gaming ChairFitting in the middle of a Venn diagram between ergonomics and gaming sensibilities, the Eureka Ergonomic Gaming Chair achieves the almost impossible by doing a pretty great job at both. Its breathable backrest helps you stay focused on the game in warm situations, and it&rsquo;s easy to put together and very adjustable. Eureka Ergonomic Gaming Chair" data-dimension48="Eureka Ergonomic Gaming ChairFitting in the middle of a Venn diagram between ergonomics and gaming sensibilities, the Eureka Ergonomic Gaming Chair achieves the almost impossible by doing a pretty great job at both. Its breathable backrest helps you stay focused on the game in warm situations, and it&rsquo;s easy to put together and very adjustable. Eureka Ergonomic Gaming Chair" data-dimension25="$"><strong>Eureka Ergonomic Gaming Chair</strong></a><br>Fitting in the middle of a Venn diagram between ergonomics and gaming sensibilities, the <a href="https://www.tomsguide.com/gaming/gaming-peripherals/eureka-axion-gaming-chair-review">Eureka Ergonomic Gaming Chair</a> achieves the almost impossible by doing a pretty great job at both. Its breathable backrest helps you stay focused on the game in warm situations, and it’s easy to put together and very adjustable.<a class="view-deal button" href="https://www.amazon.com/EUREKA-ERGONOMIC-Adjustable-Ergonomic-Comfortable/dp/B0DXVF6PM5" target="_blank" rel="nofollow" data-dimension112="51d1aa8f-4901-4064-8c1f-10732f3fd5a8" data-action="Deal Block" data-label="Eureka Ergonomic Gaming ChairFitting in the middle of a Venn diagram between ergonomics and gaming sensibilities, the Eureka Ergonomic Gaming Chair achieves the almost impossible by doing a pretty great job at both. Its breathable backrest helps you stay focused on the game in warm situations, and it&rsquo;s easy to put together and very adjustable. Eureka Ergonomic Gaming Chair" data-dimension48="Eureka Ergonomic Gaming ChairFitting in the middle of a Venn diagram between ergonomics and gaming sensibilities, the Eureka Ergonomic Gaming Chair achieves the almost impossible by doing a pretty great job at both. Its breathable backrest helps you stay focused on the game in warm situations, and it&rsquo;s easy to put together and very adjustable. Eureka Ergonomic Gaming Chair" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="fee36e79-c3f5-497e-9600-7bd4298d0e4f" data-action="Deal Block" data-label="Keychron K2 HE Mechanical KeyboardOK, it technically launched at the tail-end of 2024, but the Keychron K2 HE is a fantastic keyboard worth highlighting. Whether you&rsquo;re using it for work, play, or a little of both, it pairs the customizable nature of Keychron with fantastic Hall Effect switches. It also looks better than just about any board on the market in our minds. Keychron K2 HE Mechanical Keyboard" data-dimension48="Keychron K2 HE Mechanical KeyboardOK, it technically launched at the tail-end of 2024, but the Keychron K2 HE is a fantastic keyboard worth highlighting. Whether you&rsquo;re using it for work, play, or a little of both, it pairs the customizable nature of Keychron with fantastic Hall Effect switches. It also looks better than just about any board on the market in our minds. Keychron K2 HE Mechanical Keyboard" data-dimension25="$" href="https://www.amazon.com/Keychron-Mechanical-Double-Rail-Bluetooth-Compatible/dp/B0DCVPGB9N" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1214px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="2khbcQwSMdbVZhUkXHgY68" name="Keychron K2 HE Wireless Magnetic Switch Custom Keyboard" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2khbcQwSMdbVZhUkXHgY68.jpg" mos="" align="middle" fullscreen="" width="1214" height="1214" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.amazon.com/Keychron-Mechanical-Double-Rail-Bluetooth-Compatible/dp/B0DCVPGB9N" target="_blank" rel="nofollow" data-dimension112="fee36e79-c3f5-497e-9600-7bd4298d0e4f" data-action="Deal Block" data-label="Keychron K2 HE Mechanical KeyboardOK, it technically launched at the tail-end of 2024, but the Keychron K2 HE is a fantastic keyboard worth highlighting. Whether you&rsquo;re using it for work, play, or a little of both, it pairs the customizable nature of Keychron with fantastic Hall Effect switches. It also looks better than just about any board on the market in our minds. Keychron K2 HE Mechanical Keyboard" data-dimension48="Keychron K2 HE Mechanical KeyboardOK, it technically launched at the tail-end of 2024, but the Keychron K2 HE is a fantastic keyboard worth highlighting. Whether you&rsquo;re using it for work, play, or a little of both, it pairs the customizable nature of Keychron with fantastic Hall Effect switches. It also looks better than just about any board on the market in our minds. Keychron K2 HE Mechanical Keyboard" data-dimension25="$"><strong>Keychron K2 HE Mechanical Keyboard</strong></a><br>OK, it technically launched at the tail-end of 2024, but the <a href="https://www.tomsguide.com/computing/peripherals/keychron-k2-he-review">Keychron K2 HE</a> is a fantastic keyboard worth highlighting. Whether you’re using it for work, play, or a little of both, it pairs the customizable nature of Keychron with fantastic Hall Effect switches. It also looks better than just about any board on the market in our minds.<a class="view-deal button" href="https://www.amazon.com/Keychron-Mechanical-Double-Rail-Bluetooth-Compatible/dp/B0DCVPGB9N" target="_blank" rel="nofollow" data-dimension112="fee36e79-c3f5-497e-9600-7bd4298d0e4f" data-action="Deal Block" data-label="Keychron K2 HE Mechanical KeyboardOK, it technically launched at the tail-end of 2024, but the Keychron K2 HE is a fantastic keyboard worth highlighting. Whether you&rsquo;re using it for work, play, or a little of both, it pairs the customizable nature of Keychron with fantastic Hall Effect switches. It also looks better than just about any board on the market in our minds. Keychron K2 HE Mechanical Keyboard" data-dimension48="Keychron K2 HE Mechanical KeyboardOK, it technically launched at the tail-end of 2024, but the Keychron K2 HE is a fantastic keyboard worth highlighting. Whether you&rsquo;re using it for work, play, or a little of both, it pairs the customizable nature of Keychron with fantastic Hall Effect switches. It also looks better than just about any board on the market in our minds. Keychron K2 HE Mechanical Keyboard" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="114961c7-cc54-4925-a641-1ff35117f0e8" data-action="Deal Block" data-label="Govee Curtain Lights ProThe Govee Curtain Lights Pro are an awesome way to decorate your home for the Holidays, letting you share just about anything through the medium of, well, lighting. Still, it gets even better when you use it as a smart display, showcasing your clock, the weather, and the temperature outdoors for your indoor office. Govee Curtain Lights Pro" data-dimension48="Govee Curtain Lights ProThe Govee Curtain Lights Pro are an awesome way to decorate your home for the Holidays, letting you share just about anything through the medium of, well, lighting. Still, it gets even better when you use it as a smart display, showcasing your clock, the weather, and the temperature outdoors for your indoor office. Govee Curtain Lights Pro" data-dimension25="$" href="https://www.amazon.com/Govee-Upgraded-Changing-Waterproof-5-41%C3%975-77ft/dp/B0FCRJ7Y4J" 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:97.40%;"><img id="d96X7CqTmVUnxhPs58y6LZ" name="Govee Curtain Lights Pro" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/d96X7CqTmVUnxhPs58y6LZ.jpg" mos="" align="middle" fullscreen="" width="1500" height="1461" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.amazon.com/Govee-Upgraded-Changing-Waterproof-5-41%C3%975-77ft/dp/B0FCRJ7Y4J" target="_blank" rel="nofollow" data-dimension112="114961c7-cc54-4925-a641-1ff35117f0e8" data-action="Deal Block" data-label="Govee Curtain Lights ProThe Govee Curtain Lights Pro are an awesome way to decorate your home for the Holidays, letting you share just about anything through the medium of, well, lighting. Still, it gets even better when you use it as a smart display, showcasing your clock, the weather, and the temperature outdoors for your indoor office. Govee Curtain Lights Pro" data-dimension48="Govee Curtain Lights ProThe Govee Curtain Lights Pro are an awesome way to decorate your home for the Holidays, letting you share just about anything through the medium of, well, lighting. Still, it gets even better when you use it as a smart display, showcasing your clock, the weather, and the temperature outdoors for your indoor office. Govee Curtain Lights Pro" data-dimension25="$"><strong>Govee Curtain Lights Pro</strong></a><br>The <a href="https://www.tomsguide.com/home/smart-home/i-just-installed-govees-new-curtain-lights-pro-and-this-hidden-feature-makes-me-want-to-leave-them-on-all-the-time">Govee Curtain Lights Pro</a> are an awesome way to decorate your home for the Holidays, letting you share just about anything through the medium of, well, lighting. Still, it gets even better when you use it as a smart display, showcasing your clock, the weather, and the temperature outdoors for your indoor office.<a class="view-deal button" href="https://www.amazon.com/Govee-Upgraded-Changing-Waterproof-5-41%C3%975-77ft/dp/B0FCRJ7Y4J" target="_blank" rel="nofollow" data-dimension112="114961c7-cc54-4925-a641-1ff35117f0e8" data-action="Deal Block" data-label="Govee Curtain Lights ProThe Govee Curtain Lights Pro are an awesome way to decorate your home for the Holidays, letting you share just about anything through the medium of, well, lighting. Still, it gets even better when you use it as a smart display, showcasing your clock, the weather, and the temperature outdoors for your indoor office. Govee Curtain Lights Pro" data-dimension48="Govee Curtain Lights ProThe Govee Curtain Lights Pro are an awesome way to decorate your home for the Holidays, letting you share just about anything through the medium of, well, lighting. Still, it gets even better when you use it as a smart display, showcasing your clock, the weather, and the temperature outdoors for your indoor office. Govee Curtain Lights Pro" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="589b3674-0872-47be-b626-7029e423b1cd" data-action="Deal Block" data-label="DJI NeoAnother 2024 arrival that we can&rsquo;t get enough of, the DJI Neo is a fantastic drone that&rsquo;s a great value proposition. Ideal for beginners, it packs 4K recording, multiple shooting modes, and a compact design that makes you more likely to take it on vacation. No FAA regulations are involved, either. DJI Neo" data-dimension48="DJI NeoAnother 2024 arrival that we can&rsquo;t get enough of, the DJI Neo is a fantastic drone that&rsquo;s a great value proposition. Ideal for beginners, it packs 4K recording, multiple shooting modes, and a compact design that makes you more likely to take it on vacation. No FAA regulations are involved, either. DJI Neo" data-dimension25="$" href="https://www.amazon.com/DJI-Three-Battery-QuickShots-Stabilized-Controller-Free/dp/B0DDS1368S" 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="yQ2D9952vwuZALYFFAiFF6" name="Neo-dealbox" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yQ2D9952vwuZALYFFAiFF6.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.amazon.com/DJI-Three-Battery-QuickShots-Stabilized-Controller-Free/dp/B0DDS1368S" target="_blank" rel="nofollow" data-dimension112="589b3674-0872-47be-b626-7029e423b1cd" data-action="Deal Block" data-label="DJI NeoAnother 2024 arrival that we can&rsquo;t get enough of, the DJI Neo is a fantastic drone that&rsquo;s a great value proposition. Ideal for beginners, it packs 4K recording, multiple shooting modes, and a compact design that makes you more likely to take it on vacation. No FAA regulations are involved, either. DJI Neo" data-dimension48="DJI NeoAnother 2024 arrival that we can&rsquo;t get enough of, the DJI Neo is a fantastic drone that&rsquo;s a great value proposition. Ideal for beginners, it packs 4K recording, multiple shooting modes, and a compact design that makes you more likely to take it on vacation. No FAA regulations are involved, either. DJI Neo" data-dimension25="$"><strong>DJI Neo</strong></a><br>Another 2024 arrival that we can’t get enough of, the <a href="https://www.tomsguide.com/cameras-photography/drones/i-tested-the-dji-neo-and-its-so-good-that-all-i-can-think-about-now-is-flying-it">DJI Neo</a> is a fantastic drone that’s a great value proposition. Ideal for beginners, it packs 4K recording, multiple shooting modes, and a compact design that makes you more likely to take it on vacation. No FAA regulations are involved, either.<a class="view-deal button" href="https://www.amazon.com/DJI-Three-Battery-QuickShots-Stabilized-Controller-Free/dp/B0DDS1368S" target="_blank" rel="nofollow" data-dimension112="589b3674-0872-47be-b626-7029e423b1cd" data-action="Deal Block" data-label="DJI NeoAnother 2024 arrival that we can&rsquo;t get enough of, the DJI Neo is a fantastic drone that&rsquo;s a great value proposition. Ideal for beginners, it packs 4K recording, multiple shooting modes, and a compact design that makes you more likely to take it on vacation. No FAA regulations are involved, either. DJI Neo" data-dimension48="DJI NeoAnother 2024 arrival that we can&rsquo;t get enough of, the DJI Neo is a fantastic drone that&rsquo;s a great value proposition. Ideal for beginners, it packs 4K recording, multiple shooting modes, and a compact design that makes you more likely to take it on vacation. No FAA regulations are involved, either. DJI Neo" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="e0901393-2321-4f50-a852-72a077801dd1" data-action="Deal Block" data-label="Fujifilm Instax mini EvoThis adorable, retro-tinged camera is a social media star&rsquo;s best friend, with 100 effect combinations across 10 filters and 10 lens effects. Images come out great whichever option you select (even in low light), and it&rsquo;s small enough to fit into an everyday carry. Fujifilm Instax mini Evo" data-dimension48="Fujifilm Instax mini EvoThis adorable, retro-tinged camera is a social media star&rsquo;s best friend, with 100 effect combinations across 10 filters and 10 lens effects. Images come out great whichever option you select (even in low light), and it&rsquo;s small enough to fit into an everyday carry. Fujifilm Instax mini Evo" data-dimension25="$" href="https://www.walmart.com/ip/FUJIFILM-INSTAX-MINI-EVO-Hybrid-Instant-Camera-Black/367663480/" 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="SJvyJkgK8QuA8m5xuJBim" name="Mini-Evo-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/SJvyJkgK8QuA8m5xuJBim.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.walmart.com/ip/FUJIFILM-INSTAX-MINI-EVO-Hybrid-Instant-Camera-Black/367663480/" target="_blank" rel="nofollow" data-dimension112="e0901393-2321-4f50-a852-72a077801dd1" data-action="Deal Block" data-label="Fujifilm Instax mini EvoThis adorable, retro-tinged camera is a social media star&rsquo;s best friend, with 100 effect combinations across 10 filters and 10 lens effects. Images come out great whichever option you select (even in low light), and it&rsquo;s small enough to fit into an everyday carry. Fujifilm Instax mini Evo" data-dimension48="Fujifilm Instax mini EvoThis adorable, retro-tinged camera is a social media star&rsquo;s best friend, with 100 effect combinations across 10 filters and 10 lens effects. Images come out great whichever option you select (even in low light), and it&rsquo;s small enough to fit into an everyday carry. Fujifilm Instax mini Evo" data-dimension25="$"><strong>Fujifilm Instax mini Evo</strong></a><br>This adorable, retro-tinged camera is a social media star’s best friend, with 100 effect combinations across 10 filters and 10 lens effects. Images come out great whichever option you select (even in low light), and it’s small enough to fit into an everyday carry. <a class="view-deal button" href="https://www.walmart.com/ip/FUJIFILM-INSTAX-MINI-EVO-Hybrid-Instant-Camera-Black/367663480/" target="_blank" rel="nofollow" data-dimension112="e0901393-2321-4f50-a852-72a077801dd1" data-action="Deal Block" data-label="Fujifilm Instax mini EvoThis adorable, retro-tinged camera is a social media star&rsquo;s best friend, with 100 effect combinations across 10 filters and 10 lens effects. Images come out great whichever option you select (even in low light), and it&rsquo;s small enough to fit into an everyday carry. Fujifilm Instax mini Evo" data-dimension48="Fujifilm Instax mini EvoThis adorable, retro-tinged camera is a social media star&rsquo;s best friend, with 100 effect combinations across 10 filters and 10 lens effects. Images come out great whichever option you select (even in low light), and it&rsquo;s small enough to fit into an everyday carry. Fujifilm Instax mini Evo" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="82c498f0-4aab-437f-856f-8cc4af4247a3" data-action="Deal Block" data-label="Fujifilm X-M5Looking to give the vlogger in your life an upgrade? Look no further than the Fujifilm X-M5, which is a portable powerhouse that can simulate shooting on film, while being good value for money, too. It can record up to 4K video, and also offers vertical recording in landscape orientation, making it ideal for multiple content types. Fujifilm X-M5" data-dimension48="Fujifilm X-M5Looking to give the vlogger in your life an upgrade? Look no further than the Fujifilm X-M5, which is a portable powerhouse that can simulate shooting on film, while being good value for money, too. It can record up to 4K video, and also offers vertical recording in landscape orientation, making it ideal for multiple content types. Fujifilm X-M5" data-dimension25="$" href="https://www.adorama.com/ifjxm5skn.html" 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="vtcH67GJX2u6cHfwmqiQ3Q" name="X-M5-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/vtcH67GJX2u6cHfwmqiQ3Q.jpg" mos="" align="middle" fullscreen="" width="500" height="500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.adorama.com/ifjxm5skn.html" target="_blank" rel="nofollow" data-dimension112="82c498f0-4aab-437f-856f-8cc4af4247a3" data-action="Deal Block" data-label="Fujifilm X-M5Looking to give the vlogger in your life an upgrade? Look no further than the Fujifilm X-M5, which is a portable powerhouse that can simulate shooting on film, while being good value for money, too. It can record up to 4K video, and also offers vertical recording in landscape orientation, making it ideal for multiple content types. Fujifilm X-M5" data-dimension48="Fujifilm X-M5Looking to give the vlogger in your life an upgrade? Look no further than the Fujifilm X-M5, which is a portable powerhouse that can simulate shooting on film, while being good value for money, too. It can record up to 4K video, and also offers vertical recording in landscape orientation, making it ideal for multiple content types. Fujifilm X-M5" data-dimension25="$"><strong>Fujifilm X-M5</strong></a><br>Looking to give the vlogger in your life an upgrade? Look no further than the <a href="https://www.tomsguide.com/cameras-photography/fujifilm-x-m5-review">Fujifilm X-M5</a>, which is a portable powerhouse that can simulate shooting on film, while being good value for money, too. It can record up to 4K video, and also offers vertical recording in landscape orientation, making it ideal for multiple content types.<a class="view-deal button" href="https://www.adorama.com/ifjxm5skn.html" target="_blank" rel="nofollow" data-dimension112="82c498f0-4aab-437f-856f-8cc4af4247a3" data-action="Deal Block" data-label="Fujifilm X-M5Looking to give the vlogger in your life an upgrade? Look no further than the Fujifilm X-M5, which is a portable powerhouse that can simulate shooting on film, while being good value for money, too. It can record up to 4K video, and also offers vertical recording in landscape orientation, making it ideal for multiple content types. Fujifilm X-M5" data-dimension48="Fujifilm X-M5Looking to give the vlogger in your life an upgrade? Look no further than the Fujifilm X-M5, which is a portable powerhouse that can simulate shooting on film, while being good value for money, too. It can record up to 4K video, and also offers vertical recording in landscape orientation, making it ideal for multiple content types. Fujifilm X-M5" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="9063521b-4a2e-4007-8662-e225a90964e7" data-action="Deal Block" data-label="Apple iPhone 17The base iPhone has been great for years, but Apple really pushed things to a new level this year with the iPhone 17. It finally gets Apple&rsquo;s ProMotion from the Pro line for smoother scrolling and gaming, the chip is fantastic, and you get twice the storage at the base end without a price hike. In fact, we&rsquo;d say it&rsquo;s an easier recommendation than the Pro now. Apple iPhone 17" data-dimension48="Apple iPhone 17The base iPhone has been great for years, but Apple really pushed things to a new level this year with the iPhone 17. It finally gets Apple&rsquo;s ProMotion from the Pro line for smoother scrolling and gaming, the chip is fantastic, and you get twice the storage at the base end without a price hike. In fact, we&rsquo;d say it&rsquo;s an easier recommendation than the Pro now. Apple iPhone 17" data-dimension25="$" href="https://www.apple.com/shop/buy-iphone/iphone-17" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1211px;"><p class="vanilla-image-block" style="padding-top:123.86%;"><img id="7KmLGxUJwrEKiqzGnVwshE" name="iPhone 17" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7KmLGxUJwrEKiqzGnVwshE.jpg" mos="" align="middle" fullscreen="" width="1211" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.apple.com/shop/buy-iphone/iphone-17" target="_blank" rel="nofollow" data-dimension112="9063521b-4a2e-4007-8662-e225a90964e7" data-action="Deal Block" data-label="Apple iPhone 17The base iPhone has been great for years, but Apple really pushed things to a new level this year with the iPhone 17. It finally gets Apple&rsquo;s ProMotion from the Pro line for smoother scrolling and gaming, the chip is fantastic, and you get twice the storage at the base end without a price hike. In fact, we&rsquo;d say it&rsquo;s an easier recommendation than the Pro now. Apple iPhone 17" data-dimension48="Apple iPhone 17The base iPhone has been great for years, but Apple really pushed things to a new level this year with the iPhone 17. It finally gets Apple&rsquo;s ProMotion from the Pro line for smoother scrolling and gaming, the chip is fantastic, and you get twice the storage at the base end without a price hike. In fact, we&rsquo;d say it&rsquo;s an easier recommendation than the Pro now. Apple iPhone 17" data-dimension25="$"><strong>Apple iPhone 17</strong></a><br>The base iPhone has been great for years, but Apple really pushed things to a new level this year with the <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-review">iPhone 17</a>. It finally gets Apple’s ProMotion from the Pro line for smoother scrolling and gaming, the chip is fantastic, and you get twice the storage at the base end without a price hike. In fact, we’d say it’s an easier recommendation than the Pro now.<a class="view-deal button" href="https://www.apple.com/shop/buy-iphone/iphone-17" target="_blank" rel="nofollow" data-dimension112="9063521b-4a2e-4007-8662-e225a90964e7" data-action="Deal Block" data-label="Apple iPhone 17The base iPhone has been great for years, but Apple really pushed things to a new level this year with the iPhone 17. It finally gets Apple&rsquo;s ProMotion from the Pro line for smoother scrolling and gaming, the chip is fantastic, and you get twice the storage at the base end without a price hike. In fact, we&rsquo;d say it&rsquo;s an easier recommendation than the Pro now. Apple iPhone 17" data-dimension48="Apple iPhone 17The base iPhone has been great for years, but Apple really pushed things to a new level this year with the iPhone 17. It finally gets Apple&rsquo;s ProMotion from the Pro line for smoother scrolling and gaming, the chip is fantastic, and you get twice the storage at the base end without a price hike. In fact, we&rsquo;d say it&rsquo;s an easier recommendation than the Pro now. Apple iPhone 17" data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="a3245daa-13e7-45b9-a946-5c8c1cbadd35" data-action="Deal Block" data-label="LG C5 OLEDLG&rsquo;s C-series of TVs have always been fantastic, but the latest C5 might be the best it&rsquo;s ever been. It&rsquo;s bright, and avoids being too reflective, and the latest webOS 25 is responsive and packed with features from the jump. And gamers can rest easy knowing there&rsquo;s minimal input lag, an easy-to-access Game Settings bar, and 144Hz VRR. LG C5 OLED" data-dimension48="LG C5 OLEDLG&rsquo;s C-series of TVs have always been fantastic, but the latest C5 might be the best it&rsquo;s ever been. It&rsquo;s bright, and avoids being too reflective, and the latest webOS 25 is responsive and packed with features from the jump. And gamers can rest easy knowing there&rsquo;s minimal input lag, an easy-to-access Game Settings bar, and 144Hz VRR. LG C5 OLED" data-dimension25="$" href="https://www.amazon.com/LG-Upscaling-Filmmaker-Orchestra-OLED55C5PUA/dp/B0DYQF1Q3Z" 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:60.60%;"><img id="oBaPUFAAexE2Jge2Vinp73" name="91bxFjk187L._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/oBaPUFAAexE2Jge2Vinp73.jpg" mos="" align="middle" fullscreen="" width="1500" height="909" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong></strong><a href="https://www.amazon.com/LG-Upscaling-Filmmaker-Orchestra-OLED55C5PUA/dp/B0DYQF1Q3Z" target="_blank" rel="nofollow" data-dimension112="a3245daa-13e7-45b9-a946-5c8c1cbadd35" data-action="Deal Block" data-label="LG C5 OLEDLG&rsquo;s C-series of TVs have always been fantastic, but the latest C5 might be the best it&rsquo;s ever been. It&rsquo;s bright, and avoids being too reflective, and the latest webOS 25 is responsive and packed with features from the jump. And gamers can rest easy knowing there&rsquo;s minimal input lag, an easy-to-access Game Settings bar, and 144Hz VRR. LG C5 OLED" data-dimension48="LG C5 OLEDLG&rsquo;s C-series of TVs have always been fantastic, but the latest C5 might be the best it&rsquo;s ever been. It&rsquo;s bright, and avoids being too reflective, and the latest webOS 25 is responsive and packed with features from the jump. And gamers can rest easy knowing there&rsquo;s minimal input lag, an easy-to-access Game Settings bar, and 144Hz VRR. LG C5 OLED" data-dimension25="$"><strong>LG C5 OLED</strong></a><br>LG’s C-series of TVs have always been fantastic, but <a href="https://www.tomsguide.com/tvs/oled-tvs/lg-c5-oled-tv-review#section-lg-c5-oled-review-pricing-and-availability">the latest C5</a> might be the best it’s ever been. It’s bright, and avoids being too reflective, and the latest webOS 25 is responsive and packed with features from the jump. And gamers can rest easy knowing there’s minimal input lag, an easy-to-access Game Settings bar, and 144Hz VRR.<a class="view-deal button" href="https://www.amazon.com/LG-Upscaling-Filmmaker-Orchestra-OLED55C5PUA/dp/B0DYQF1Q3Z" target="_blank" rel="nofollow" data-dimension112="a3245daa-13e7-45b9-a946-5c8c1cbadd35" data-action="Deal Block" data-label="LG C5 OLEDLG&rsquo;s C-series of TVs have always been fantastic, but the latest C5 might be the best it&rsquo;s ever been. It&rsquo;s bright, and avoids being too reflective, and the latest webOS 25 is responsive and packed with features from the jump. And gamers can rest easy knowing there&rsquo;s minimal input lag, an easy-to-access Game Settings bar, and 144Hz VRR. LG C5 OLED" data-dimension48="LG C5 OLEDLG&rsquo;s C-series of TVs have always been fantastic, but the latest C5 might be the best it&rsquo;s ever been. It&rsquo;s bright, and avoids being too reflective, and the latest webOS 25 is responsive and packed with features from the jump. And gamers can rest easy knowing there&rsquo;s minimal input lag, an easy-to-access Game Settings bar, and 144Hz VRR. LG C5 OLED" data-dimension25="$">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I got this compact power bank for my Meta Quest 3, but now I use it to charge everything ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/i-got-this-compact-power-bank-for-my-meta-quest-3-but-now-i-use-it-for-everything</link>
                                                                            <description>
                            <![CDATA[ If you're looking for a way to extend the Meta Quest 3's battery life, this Kiwi Design P5000 Compact Power Bank bundle will effortlessly give you extra VR time. But it can be used for all your USB-C devices, too. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3GgDZcWud2NPijQrFMYxFW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/EnQUJYb4YzqFePQWREVhyU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 08 Nov 2025 06:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Darragh Murphy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5QiaTSWf9FcVB7STxcdo4M.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Darragh is Tom’s Guide’s Computing Editor and is fascinated by all things bizarre in tech. This usually leads to assorted coverage varying from washing machines designed for earbuds to the wild world of laptops. Whether it&#039;s connecting Scar from The Lion King to two-factor authentication or turning his love for laptops into a fabricated rap battle from 8 Mile, he believes there’s always a quirky spin to be made.&lt;br&gt;&lt;br&gt;Darragh has previously been an Editor for Laptop Mag and a News Editor for Time Out Dubai, where he also headed the gaming and tech section. His work can be seen in Mashable, Android Police, Shortlist Dubai, Proton, theBit.nz, ReviewsFire and more. &lt;br&gt;&lt;br&gt;While laptops are his bread and butter, he’s also reviewed smartphones, monitors, speakers, docking stations and VPNs. He’s covered IFA, MWC Barcelona, the Consumer Electronics Show (&lt;a href=&quot;https://www.tomsguide.com/uk/tag/ces&quot; target=&quot;_blank&quot;&gt;CES&lt;/a&gt;) and more.&lt;br&gt;&lt;br&gt;When he&#039;s not checking out the latest devices and all things computing, he can be found going for dreaded long runs, watching terrible shark movies, and trying to find time to game.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/EnQUJYb4YzqFePQWREVhyU-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Kiwi Design P5000 Compact Power Bank]]></media:description>                                                            <media:text><![CDATA[Kiwi Design P5000 Compact Power Bank]]></media:text>
                                <media:title type="plain"><![CDATA[Kiwi Design P5000 Compact Power Bank]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/EnQUJYb4YzqFePQWREVhyU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If there's one essential upgrade every Meta Quest owner needs, it's a way to extend the VR headsets' battery life. Sure, the <a href="https://www.tomsguide.com/reviews/meta-quest-3">Quest 3</a> and <a href="https://www.tomsguide.com/computing/vr-ar/meta-quest-3s-review">Quest 3S</a> may be among the <a href="https://www.tomsguide.com/best-picks/best-vr-headsets">best VR headsets</a> around, but getting two hours before they go kaput simply isn't enough to make the most out of them. </p><p>Enter Kiwi Design. One of the leading brands behind all things Meta Quest accessories, the company has already impressed with tis <a href="https://www.tomsguide.com/computing/vr-ar/i-cant-put-my-meta-quest-3-down-thanks-to-this-vr-accessory-and-now-i-cant-imagine-playing-without-it">H4 Boost Halo Battery Strap</a> and <a href="https://www.tomsguide.com/computing/vr-ar/kiwi-design-k4-duo-meta-quest-vr-head-strap-review">K4 Duo Strap</a> for upgraded audio. Now, there's another handy accessory in its arsenal: the Kiwi Design P5000 Compact Power Bank. <em> </em></p><div class="product"><a data-dimension112="f92260d0-ac7e-4776-9477-c118872a616a" data-action="Deal Block" data-label="The Kiwi Design P5000 Compact Power Bank comes in a set of two 5,000mAh power banks, and while they're designed for VR headsets like the Meta Quest 3 and Quest 3S, they also act as reliable backup batteries for pretty much all USB-C devices. With the secure bracket that can be attached using a hook-and-loop velcro strap, 20W magnetic dock for fast charging and a lightweight, portable design, these P5000 power banks can help power your devices anywhere. Use the code NC6YXJ56HVZR to get an extra 10% off!" data-dimension48="The Kiwi Design P5000 Compact Power Bank comes in a set of two 5,000mAh power banks, and while they're designed for VR headsets like the Meta Quest 3 and Quest 3S, they also act as reliable backup batteries for pretty much all USB-C devices. With the secure bracket that can be attached using a hook-and-loop velcro strap, 20W magnetic dock for fast charging and a lightweight, portable design, these P5000 power banks can help power your devices anywhere. Use the code NC6YXJ56HVZR to get an extra 10% off!" data-dimension25="$80" href="https://www.kiwidesign.com/products/gb02-battery-pack" 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="msXGvFx6qjJF7nVvmXvdeh" name="Kiwi Design P5000 Compact Power Bank deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/msXGvFx6qjJF7nVvmXvdeh.jpg" mos="" align="middle" fullscreen="" width="1600" height="1600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Kiwi Design P5000 Compact Power Bank comes in a set of two 5,000mAh power banks, and while they're designed for VR headsets like the Meta Quest 3 and Quest 3S, they also act as reliable backup batteries for pretty much all USB-C devices. With the secure bracket that can be attached using a hook-and-loop velcro strap, 20W magnetic dock for fast charging and a lightweight, portable design, these P5000 power banks can help power your devices anywhere. Use the code <strong>NC6YXJ56HVZR</strong> to get an extra 10% off! <a class="view-deal button" href="https://www.kiwidesign.com/products/gb02-battery-pack" target="_blank" rel="nofollow" data-dimension112="f92260d0-ac7e-4776-9477-c118872a616a" data-action="Deal Block" data-label="The Kiwi Design P5000 Compact Power Bank comes in a set of two 5,000mAh power banks, and while they're designed for VR headsets like the Meta Quest 3 and Quest 3S, they also act as reliable backup batteries for pretty much all USB-C devices. With the secure bracket that can be attached using a hook-and-loop velcro strap, 20W magnetic dock for fast charging and a lightweight, portable design, these P5000 power banks can help power your devices anywhere. Use the code NC6YXJ56HVZR to get an extra 10% off!" data-dimension48="The Kiwi Design P5000 Compact Power Bank comes in a set of two 5,000mAh power banks, and while they're designed for VR headsets like the Meta Quest 3 and Quest 3S, they also act as reliable backup batteries for pretty much all USB-C devices. With the secure bracket that can be attached using a hook-and-loop velcro strap, 20W magnetic dock for fast charging and a lightweight, portable design, these P5000 power banks can help power your devices anywhere. Use the code NC6YXJ56HVZR to get an extra 10% off!" data-dimension25="$80">View Deal</a></p></div><p>Wait, just a power bank? Surely there are enough of those going around that can give any VR headset a boost. That was my initial thought, but not only is the P5000 designed to be a valuable backup battery for virtually all VR headsets, it also comes bundled as a set of two.</p><p>That means this power bank bundle offers up two 5,000mAh capacity batteries that can be attached to a Meta Quest 3/3S, which I've used to get an additional three hours of playtime out of my headset. They're light, easily swappable and can be attached anywhere thanks to the secure bracket that uses a secure velcro strap. </p><p>Since using the P5000 Power Banks, they've already offered a simple yet effective system of comfortably charging my Meta Quest 3 without being tethered to a cable. But this versatility doesn't stop at VR, as these battery boosters also serve a multi-purpose use for any USB-C device that requires extra juice. </p><p>From attaching it to my <a href="https://www.tomsguide.com/computing/i-traveled-500-miles-with-this-laptop-backpack-and-its-done-wonders-for-my-daily-commute">Alpaka backpack</a> to act as an impromptu charger while on the go to acting as a backup to power up my iPhone, Apple Watch and AirPods, I now use the P5000 Compact Power Banks for everything. There are some of the <a href="https://www.tomsguide.com/best-picks/best-portable-chargers">best power banks</a> you can get for your Meta Quest headset, but also for so much more. </p><h2 id="double-the-battery-power">Double the battery power</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EKDTnzZi8E8icmfhxFsWxU" name="Kiwi Design P5000 Compact Power Bank" alt="Kiwi Design P5000 Compact Power Bank" src="https://cdn.mos.cms.futurecdn.net/EKDTnzZi8E8icmfhxFsWxU.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>With just 5,000mAh battery capacity between the two P5000s, these are far from the most you can get from a power bank today. I mean, our current favorite, the CUKTECH 30 Power Bank, offers a whopping 40,000mAh to power your devices many times over. </p><p>But this smaller capacity is intended by Kiwi Design. Weighing just 0.2lbs/105g each, they barely add any weight when I attached one to my Meta Quest 3, and that also makes them extremely portable to carry around and strap onto other devices. </p><p>And of course, having two power banks handy will always be better than one, and the P5000s are easily swappable when I'm in dire need of extra battery life. After using up one power bank to get an additional 1.5 hours out of the VR headset, all I needed to do was pop it out and fit in the other that's fully charged. </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="qFKnhtKiCzPRnmMULW256V" name="Kiwi Design P5000 Compact Power Bank" alt="Kiwi Design P5000 Compact Power Bank" src="https://cdn.mos.cms.futurecdn.net/qFKnhtKiCzPRnmMULW256V.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>In fact, despite already delivering a total of five hours of battery to the Quest 3, I could prolong this by charging the substitute P5000 once it was used up. That's thanks to the included 20W magnetic charging docks, which take around an hour and a half to charge the batteries from 0% to 100%. It's like an infinite loop of charging. </p><p>I'm also a fan of the bracket with a hook-and-loop velcro strap, which meant I could place it anywhere on my Meta Quest 3's head strap. I placed it on the top, but it can be strapped onto the side or back, too. What's more, when attached, the P5000 stays securely fastened, as a clasp mechanism keeps it locked in place, with the orange button on top making it easy to release it. For the amount of moving around done in VR, especially when playing the <a href="https://www.tomsguide.com/best-picks/best-meta-quest-3-games">best Meta Quest games</a>, that's hugely welcome. </p><p>While head straps with built-in batteries like Kiwi Design's H4 Boost offer longer battery life in a single session (without the need to change batteries), I got more use out of the P5000 Compact Power Banks in the real world. </p><h2 id="extra-portable-power">Extra portable power</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="342sR3GJWaBvSNBZuumAAV" name="Kiwi Design P5000 Compact Power Bank" alt="Kiwi Design P5000 Compact Power Bank" src="https://cdn.mos.cms.futurecdn.net/342sR3GJWaBvSNBZuumAAV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Power banks are made for portability, and that's exactly what the P5000s achieve. They're named "Compact" for a reason, with each fitting the size of my hand. I've slipped them into the pockets of my backpack without them taking up much space at all. </p><p>No, I don't take them along with me to charge my Quest 3 (that generally stays at home). Since they come with USB-C slots, I can plug these power banks into nearly any of my devices. I've used it to charge my <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-10-review">Apple Watch 10</a>, power up my <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a>, and even give my <a href="https://www.tomsguide.com/computing/smart-glasses/even-realities-g1-smart-glasses-review">Even Realities G1 smart glasses</a> case extra juice. I was also able to charge multiple devices at once using the <a href="https://www.tomsguide.com/tech/ive-been-using-this-3-in-1-wireless-charger-for-2-weeks-and-its-a-must-have-for-travel">Satechi OntheGo 3-in-1 Charger</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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LKJ553W9pfCgmpFy85QVwU" name="Kiwi Design P5000 Compact Power Bank" alt="Kiwi Design P5000 Compact Power Bank" src="https://cdn.mos.cms.futurecdn.net/LKJ553W9pfCgmpFy85QVwU.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>The bracket delivers even more charging opportunities. Since it can be attached to anything the strap can wrap around, I put it on my backpack strap to act as an easy-to-access charger while on the move. But there are better places to put it, like on selfie sticks or <a href="https://www.tomsguide.com/best-picks/best-iphone-tripods">tripods</a> to charge your smartphone, <a href="https://www.tomsguide.com/us/best-bluetooth-speakers,review-1982.html">Bluetooth speakers</a> when pumping out tunes outdoors and even <a href="https://www.tomsguide.com/us/best-action-cameras,review-3046.html">action cameras</a>.</p><h2 id="is-the-kiwi-design-p5000-compact-power-bank-worth-it">Is the Kiwi Design P5000 Compact Power Bank worth it?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="DgzQ26aB8BVLG3DixXMkxU" name="Kiwi Design P5000 Compact Power Bank" alt="Kiwi Design P5000 Compact Power Bank" src="https://cdn.mos.cms.futurecdn.net/DgzQ26aB8BVLG3DixXMkxU.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Kiwi Design may have made a reliable power bank system for VR headsets, but it took the P5000 Compact Power Bank's design further by making it for way more than just charging a Meta Quest 3. </p><p>Providing two 5,000mAh power banks is already a win, but being able to easily use them for most charging scenarios is a huge perk to have. And, once one loses juice, another will be standing by fully charged to take advantage of. </p><p>It's a great way to charge a Meta Quest headset, although its $89 price tag can seem a little steep considering the usual $79 cost of the Kiwi Design H4 Boost Battery Strap (<a href="https://www.amazon.com/Comfort-Battery-Accessories-Headset-Pressure-PC/dp/B0D6W88TCN/" target="_blank" rel="nofollow">currently down to $63 at Amazon</a>). That said, that can't be used for other devices, and again, there's <em>two </em>power banks to make use of. I do wish the charging speeds were faster, but that doesn't take away from what these power banks offer.</p><p>If you're in need of versatile backup batteries for your VR headset and other devices, Kiwi Design's P5000 Compact Power Banks will do the trick. </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/computing/i-ditched-my-laptop-charger-for-this-power-bank-with-140w-charging-speed-and-its-down-to-its-all-time-lowest-price">I ditched my laptop charger for this power bank with 140W charging speed — and it's down to its all-time lowest price</a></li><li><a href="https://www.tomsguide.com/gaming/i-turned-my-living-room-into-an-arcade-with-the-gaime-light-guns-and-lost-a-whole-night-to-time-crisis">I turned my living room into an arcade with the G’AIM’E light guns and lost a whole night to Time Crisis</a></li><li><a href="https://www.tomsguide.com/computing/virtual-reality/i-just-tested-mixed-reality-link-for-windows-11-with-my-meta-quest-3-and-its-shockingly-good-for-a-free-feature">I just tested Mixed Reality Link for Windows 11 with my Meta Quest 3, and it’s shockingly good for a free feature</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Best tech gifts 2025 — 31+ picks for the gadget-lover on your list ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/best-tech-gifts-and-gadgets</link>
                                                                            <description>
                            <![CDATA[ Here are the best tech gifts for 2025 from our team of experts. We've included products for every budget and every kind of person you have your list. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">yasvxow9KfF49Z2mQvcoCj</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/8aLWiS9kcjU7X69VwJKNxj-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 05 Nov 2025 14:21:49 +0000</pubDate>                                                                                                                                <updated>Tue, 11 Nov 2025 16:50:08 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Kate Kozuch ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xAVUdx6Qtp3SzugnnfNYsL.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Kate Kozuch is a managing editor of social and video at Tom&#039;s Guide, where she&#039;s been with the team since 2019. She also reviews smartwatches, covers TVs, tests the latest audio products and dabbles in cooking appliances. Of course, that&#039;s not when she&#039;s working on building the &lt;a href=&quot;https://www.tomsguide.com/reference/smart-home-guide&quot;&gt;ultimate DIY smart home&lt;/a&gt;. She has conducted over 100 different product reviews across these categories, turning her findings into buying guides and face-offs. She also manages a number of gift guides on the site. Kate has a strong on-camera presence as well. She has appeared on Cheddar and Fox 5 NY to talk trending tech news. She is also regularly featured on the Tom&#039;s Guide YouTube channel, runs the &lt;a href=&quot;https://www.tiktok.com/@tomsguide?lang=en&quot;&gt;Tom&#039;s Guide TikTok account&lt;/a&gt; with over 350,000 followers, and features all the tech she&#039;s testing &lt;a href=&quot;https://www.instagram.com/katekozuch/&quot;&gt;on her Instagram&lt;/a&gt;. When she’s not filming tech videos, you can find her taking up a new sport, mastering the NYT Crossword or channeling her inner celebrity chef. Speaking of, be sure to ask her about the time Guy Fieri made her a margarita at CES, or when her video of Martha Stewart drinking a margarita went mega-viral. Clearly, Kate has a thing for culinary icons and margaritas.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/8aLWiS9kcjU7X69VwJKNxj-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tech gift guide]]></media:description>                                                            <media:text><![CDATA[Tech gift guide]]></media:text>
                                <media:title type="plain"><![CDATA[Tech gift guide]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/8aLWiS9kcjU7X69VwJKNxj-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve rounded up the best tech gifts you can buy this year. My team and I spend all year testing top tech products, from smart home gadgets and gaming gear to audio equipment and connected fitness devices, so hopefully I can make your gift shopping a lot easier.</p><p>The great thing about the tech gifts and gadgets on my list is that there’s truly something for everyone. Shopping for an avid gamer? I’ve got the hottest consoles and game titles. Need a gift for someone always on the go? I’ll show you my favorite travel and mobile accessories. How about the home chef or fitness enthusiast? I’ve got foolproof recommendations for them, too.</p><p>I’ve put together the ultimate selection of tech gifts and, to make things simple, I’ve separated them by category and included options for every budget.</p><h3 class="article-body__section" id="section-mobile-and-tech-accessories"><span>Mobile and Tech Accessories</span></h3><div class="product"><a data-dimension112="9d98801f-ae19-4b9c-95d6-b900bc07e5dc" data-action="Deal Block" data-label="Apple AirTag" data-dimension48="Apple AirTag" data-dimension25="$24" href="https://www.amazon.com/dp/B0CWXNS552" 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:100.13%;"><img id="BcBjvsdUuy3wm5KWLWHFrB" name="airtag deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/BcBjvsdUuy3wm5KWLWHFrB.jpg" mos="" align="middle" fullscreen="" width="1498" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/apple-airtags" data-dimension112="9d98801f-ae19-4b9c-95d6-b900bc07e5dc" data-action="Deal Block" data-label="Apple AirTag" data-dimension48="Apple AirTag" data-dimension25="$24">Apple AirTag</a> is an excellent key finder that is extremely easy to set up and does a great job of locating your valuables. In other words, it's the perfect gift for the person who's always misplacing their keys. Someone can never have too many!<a class="view-deal button" href="https://www.amazon.com/dp/B0CWXNS552" target="_blank" rel="nofollow" data-dimension112="9d98801f-ae19-4b9c-95d6-b900bc07e5dc" data-action="Deal Block" data-label="Apple AirTag" data-dimension48="Apple AirTag" data-dimension25="$24">View Deal</a></p></div><div class="product"><a data-dimension112="c66e6c96-e1db-4591-81a7-b038cf160c4e" data-action="Deal Block" data-label="This 10,000mAh portable charger from Anker has a built-in USB-C cable, making it the perfect accessory for most smartphones and tablets. I especially like this battery pack accessory because of its battery status display." data-dimension48="This 10,000mAh portable charger from Anker has a built-in USB-C cable, making it the perfect accessory for most smartphones and tablets. I especially like this battery pack accessory because of its battery status display." data-dimension25="$29" href="https://www.amazon.com/gp/product/B0C9CPK4GL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:816px;"><p class="vanilla-image-block" style="padding-top:95.34%;"><img id="hjMpdWYCbpeGkLffGgxka8" name="Screenshot 2023-11-24 at 9.33.52 AM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/hjMpdWYCbpeGkLffGgxka8.png" mos="" align="middle" fullscreen="" width="816" height="778" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This 10,000mAh portable charger from Anker has a built-in USB-C cable, making it the perfect accessory for most smartphones and tablets. I especially like this battery pack accessory because of its battery status display.<a class="view-deal button" href="https://www.amazon.com/gp/product/B0C9CPK4GL" target="_blank" rel="nofollow" data-dimension112="c66e6c96-e1db-4591-81a7-b038cf160c4e" data-action="Deal Block" data-label="This 10,000mAh portable charger from Anker has a built-in USB-C cable, making it the perfect accessory for most smartphones and tablets. I especially like this battery pack accessory because of its battery status display." data-dimension48="This 10,000mAh portable charger from Anker has a built-in USB-C cable, making it the perfect accessory for most smartphones and tablets. I especially like this battery pack accessory because of its battery status display." data-dimension25="$29">View Deal</a></p></div><div class="product"><a data-dimension112="a6157cc8-d462-4d84-9bf5-dfe62123e354" data-action="Deal Block" data-label="For an organized charging solution, Belkin's 3-in-1 wireless charging stand is perfect gift of convenience for the person who either can't keep track of all their gadgets, or who's nightstand is always mess of charging cables. Make sure to clip the coupon for $10 off." data-dimension48="For an organized charging solution, Belkin's 3-in-1 wireless charging stand is perfect gift of convenience for the person who either can't keep track of all their gadgets, or who's nightstand is always mess of charging cables. Make sure to clip the coupon for $10 off." data-dimension25="$109" href="https://www.amazon.com/Belkin-MagSafe-Wireless-Charging-Stand/dp/B0DL86NC5Z" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:924px;"><p class="vanilla-image-block" style="padding-top:84.96%;"><img id="2VaNNmdRQes3LyzQwoBvbi" name="51e3Cc-kqCL._AC_SL1000_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2VaNNmdRQes3LyzQwoBvbi.jpg" mos="" align="middle" fullscreen="" width="924" height="785" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For an organized charging solution, Belkin's 3-in-1 wireless charging stand is perfect gift of convenience<em> </em>for the person who either can't keep track of all their gadgets, or who's nightstand is always mess of charging cables. Make sure to clip the coupon for $10 off.<a class="view-deal button" href="https://www.amazon.com/Belkin-MagSafe-Wireless-Charging-Stand/dp/B0DL86NC5Z" target="_blank" rel="nofollow" data-dimension112="a6157cc8-d462-4d84-9bf5-dfe62123e354" data-action="Deal Block" data-label="For an organized charging solution, Belkin's 3-in-1 wireless charging stand is perfect gift of convenience for the person who either can't keep track of all their gadgets, or who's nightstand is always mess of charging cables. Make sure to clip the coupon for $10 off." data-dimension48="For an organized charging solution, Belkin's 3-in-1 wireless charging stand is perfect gift of convenience for the person who either can't keep track of all their gadgets, or who's nightstand is always mess of charging cables. Make sure to clip the coupon for $10 off." data-dimension25="$109">View Deal</a></p></div><div class="product"><a data-dimension112="d3ed9b18-2703-4607-8a1d-cd6b7d578bc9" data-action="Deal Block" data-label="The Fujifilm Instax Mini 12 is one of the best instant cameras for printing memories. Anyone can pick up this camera, shoot and print their photos with no fuss. It's endless fun in a compact package. This bundle includes everyone a new Instax user needs to get started." data-dimension48="The Fujifilm Instax Mini 12 is one of the best instant cameras for printing memories. Anyone can pick up this camera, shoot and print their photos with no fuss. It's endless fun in a compact package. This bundle includes everyone a new Instax user needs to get started." data-dimension25="$109" href="https://www.amazon.com/Fujifilm-INSTAX-Purple-Holiday-Bundle/dp/B0DFKPWWTP/" 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:60.33%;"><img id="XCdH3C9FGFR9F6FSMqRKwf" name="71vjrB0-ZlL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/XCdH3C9FGFR9F6FSMqRKwf.jpg" mos="" align="middle" fullscreen="" width="1500" height="905" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fujifilm Instax Mini 12 is one of the best instant cameras for printing memories. Anyone can pick up this camera, shoot and print their photos with no fuss. It's endless fun in a compact package. This bundle includes everyone a new Instax user needs to get started.<a class="view-deal button" href="https://www.amazon.com/Fujifilm-INSTAX-Purple-Holiday-Bundle/dp/B0DFKPWWTP/" target="_blank" rel="nofollow" data-dimension112="d3ed9b18-2703-4607-8a1d-cd6b7d578bc9" data-action="Deal Block" data-label="The Fujifilm Instax Mini 12 is one of the best instant cameras for printing memories. Anyone can pick up this camera, shoot and print their photos with no fuss. It's endless fun in a compact package. This bundle includes everyone a new Instax user needs to get started." data-dimension48="The Fujifilm Instax Mini 12 is one of the best instant cameras for printing memories. Anyone can pick up this camera, shoot and print their photos with no fuss. It's endless fun in a compact package. This bundle includes everyone a new Instax user needs to get started." data-dimension25="$109">View Deal</a></p></div><div class="product"><a data-dimension112="5869c0f9-6428-4d7d-a3af-b47d4a4794fe" data-action="Deal Block" data-label="best Kindles," data-dimension48="best Kindles," data-dimension25="$159" href="https://www.amazon.com/All-new-Amazon-Kindle-Paperwhite-glare-free/dp/B0CFPJYX7P/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1465px;"><p class="vanilla-image-block" style="padding-top:102.39%;"><img id="QLdgDSHsY8qXsAtBhBiqAS" name="515vhWKOsGL._AC_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QLdgDSHsY8qXsAtBhBiqAS.jpg" mos="" align="middle" fullscreen="" width="1465" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Among all the <a href="https://www.tomsguide.com/us/best-e-readers,review-2766.html" data-dimension112="5869c0f9-6428-4d7d-a3af-b47d4a4794fe" data-action="Deal Block" data-label="best Kindles," data-dimension48="best Kindles," data-dimension25="$159">best Kindles, </a>my favorite choice for most people is the Kindle Paperwhite. The 7-inch display, water-resistant design and 12-week battery life make it a great gift. But you can read our full <a href="https://www.tomsguide.com/tablets/e-readers/kindle-paperwhite-2024-review">Kindle Paperwhite review</a> to learn more.<a class="view-deal button" href="https://www.amazon.com/All-new-Amazon-Kindle-Paperwhite-glare-free/dp/B0CFPJYX7P/" target="_blank" rel="nofollow" data-dimension112="5869c0f9-6428-4d7d-a3af-b47d4a4794fe" data-action="Deal Block" data-label="best Kindles," data-dimension48="best Kindles," data-dimension25="$159">View Deal</a></p></div><div class="product"><a data-dimension112="5cfb1ba2-eda1-4f96-ad6d-0553b333a3c3" data-action="Deal Block" data-label="Ray‑Ban Meta Gen  2" data-dimension48="Ray‑Ban Meta Gen  2" data-dimension25="$379" href="https://www.amazon.com/dp/B0FLYGRDKW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1096px;"><p class="vanilla-image-block" style="padding-top:87.23%;"><img id="qzynQ64gtueqmge6cPzTU5" name="rbm.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/qzynQ64gtueqmge6cPzTU5.png" mos="" align="middle" fullscreen="" width="1096" height="956" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For the style‑savvy tech lover, the <a href="https://www.tomsguide.com/computing/smart-glasses/ray-ban-meta-gen-2-review" data-dimension112="5cfb1ba2-eda1-4f96-ad6d-0553b333a3c3" data-action="Deal Block" data-label="Ray‑Ban Meta Gen  2" data-dimension48="Ray‑Ban Meta Gen  2" data-dimension25="$379">Ray‑Ban Meta Gen  2</a> blends iconic sunnies with next‑level wearable smarts. With a 12‑MP ultra‑wide camera, open‑ear speakers, built‑in Meta AI and up to 8 hours of battery life, it’s like a smartphone you wear.<a class="view-deal button" href="https://www.amazon.com/dp/B0FLYGRDKW" target="_blank" rel="nofollow" data-dimension112="5cfb1ba2-eda1-4f96-ad6d-0553b333a3c3" data-action="Deal Block" data-label="Ray‑Ban Meta Gen  2" data-dimension48="Ray‑Ban Meta Gen  2" data-dimension25="$379">View Deal</a></p></div><h3 class="article-body__section" id="section-smart-home"><span>Smart Home</span></h3><div class="product"><a data-dimension112="e7cea3b9-ae90-43fd-a2c4-4d683f4d189b" data-action="Deal Block" data-label="Give the gift of effortless entertainment with Google TV this holiday season. The 65-inch display features TCL’s advanced Halo Control System for stunning picture quality and ultra-high contrast, paired with Google TV’s powerful search and access to over 10,000 apps for a premium viewing experience. With hundreds of free channels included out of the box, the TCL 65-inch is the gift that keeps on giving.Some apps, content, and/or features may not be available in all countries. Subject to availability. Subscription, download, or purchase may be required for viewing. US only." data-dimension48="Give the gift of effortless entertainment with Google TV this holiday season. The 65-inch display features TCL’s advanced Halo Control System for stunning picture quality and ultra-high contrast, paired with Google TV’s powerful search and access to over 10,000 apps for a premium viewing experience. With hundreds of free channels included out of the box, the TCL 65-inch is the gift that keeps on giving.Some apps, content, and/or features may not be available in all countries. Subject to availability. Subscription, download, or purchase may be required for viewing. US only." data-dimension25="$" href="https://www.bestbuy.com/product/tcl-65-class-qm8k-series-4k-uhd-hdr-qd-mini-led-smart-tv-with-google-tv-2025/J36QYTQZ3T?ref=186&loc=TCL_1102253" target="_blank" rel="nofollow sponsored"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:60.78%;"><img id="M8txBoGMQKb57Q6tpFm2CA" name="tcl_qdminiled_googletv_dealblock" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/M8txBoGMQKb57Q6tpFm2CA.png" mos="" align="middle" fullscreen="" width="900" height="547" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Give the gift of effortless entertainment with Google TV this holiday season. The 65-inch display features TCL’s advanced Halo Control System for stunning picture quality and ultra-high contrast, paired with Google TV’s powerful search and access to over 10,000 apps for a premium viewing experience. With hundreds of free channels included out of the box, the TCL 65-inch is the gift that keeps on giving.</p><p></p><p><sup><em>Some apps, content, and/or features may not be available in all countries. Subject to availability. Subscription, download, or purchase may be required for viewing. US only.</em></sup><a class="view-deal button" href="https://www.bestbuy.com/product/tcl-65-class-qm8k-series-4k-uhd-hdr-qd-mini-led-smart-tv-with-google-tv-2025/J36QYTQZ3T?ref=186&loc=TCL_1102253" target="_blank" rel="nofollow sponsored" data-dimension112="e7cea3b9-ae90-43fd-a2c4-4d683f4d189b" data-action="Deal Block" data-label="Give the gift of effortless entertainment with Google TV this holiday season. The 65-inch display features TCL’s advanced Halo Control System for stunning picture quality and ultra-high contrast, paired with Google TV’s powerful search and access to over 10,000 apps for a premium viewing experience. With hundreds of free channels included out of the box, the TCL 65-inch is the gift that keeps on giving.Some apps, content, and/or features may not be available in all countries. Subject to availability. Subscription, download, or purchase may be required for viewing. US only." data-dimension48="Give the gift of effortless entertainment with Google TV this holiday season. The 65-inch display features TCL’s advanced Halo Control System for stunning picture quality and ultra-high contrast, paired with Google TV’s powerful search and access to over 10,000 apps for a premium viewing experience. With hundreds of free channels included out of the box, the TCL 65-inch is the gift that keeps on giving.Some apps, content, and/or features may not be available in all countries. Subject to availability. Subscription, download, or purchase may be required for viewing. US only." data-dimension25="$">View Deal</a></p></div><div class="product"><a data-dimension112="cd54dbdc-3f21-4c89-8c99-d5fa11fd8eea" data-action="Deal Block" data-label="These color outdoor light bulbs make any patio feel like a party destination. I recommend paring them to the companion app for easy control. They're also weather-proof and shatter-proof, so you can leave them up year-round. There are three size options starting at 24ft." data-dimension48="These color outdoor light bulbs make any patio feel like a party destination. I recommend paring them to the companion app for easy control. They're also weather-proof and shatter-proof, so you can leave them up year-round. There are three size options starting at 24ft." data-dimension25="$34" href="https://www.amazon.com/Govee-Dimmable-Waterproof-Shatterproof-Changing/dp/B09DFGM7S2" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1489px;"><p class="vanilla-image-block" style="padding-top:96.84%;"><img id="X9w7jnKh6KsVha4auTvAzY" name="71xDsFn+SrL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/X9w7jnKh6KsVha4auTvAzY.jpg" mos="" align="middle" fullscreen="" width="1489" height="1442" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>These color outdoor light bulbs make any patio feel like a party destination. I recommend paring them to the companion app for easy control. They're also weather-proof and shatter-proof, so you can leave them up year-round. There are three size options starting at 24ft.<a class="view-deal button" href="https://www.amazon.com/Govee-Dimmable-Waterproof-Shatterproof-Changing/dp/B09DFGM7S2" target="_blank" rel="nofollow" data-dimension112="cd54dbdc-3f21-4c89-8c99-d5fa11fd8eea" data-action="Deal Block" data-label="These color outdoor light bulbs make any patio feel like a party destination. I recommend paring them to the companion app for easy control. They're also weather-proof and shatter-proof, so you can leave them up year-round. There are three size options starting at 24ft." data-dimension48="These color outdoor light bulbs make any patio feel like a party destination. I recommend paring them to the companion app for easy control. They're also weather-proof and shatter-proof, so you can leave them up year-round. There are three size options starting at 24ft." data-dimension25="$34">View Deal</a></p></div><div class="product"><a data-dimension112="bc11116c-e4f2-43ad-9f22-a1e5c80bb341" data-action="Deal Block" data-label="best smart plugs" data-dimension48="best smart plugs" data-dimension25="$25" href="https://www.amazon.com/Kasa-Smart-Protector-Required-KP303/dp/B083JKSSR5" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1401px;"><p class="vanilla-image-block" style="padding-top:69.24%;"><img id="d7XGcKASeNrgN4BRizTjLJ" name="Kasa Strip.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/d7XGcKASeNrgN4BRizTjLJ.jpg" mos="" align="middle" fullscreen="" width="1401" height="970" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>We named this space-saving power strip one of the <a href="https://www.tomsguide.com/us/best-smart-plugs,review-4087.html" data-dimension112="bc11116c-e4f2-43ad-9f22-a1e5c80bb341" data-action="Deal Block" data-label="best smart plugs" data-dimension48="best smart plugs" data-dimension25="$25">best smart plugs</a> you can buy. It comes with outlets plus USB ports, and you can control each connected device individually, plus you can monitor energy usage. <a class="view-deal button" href="https://www.amazon.com/Kasa-Smart-Protector-Required-KP303/dp/B083JKSSR5" target="_blank" rel="nofollow" data-dimension112="bc11116c-e4f2-43ad-9f22-a1e5c80bb341" data-action="Deal Block" data-label="best smart plugs" data-dimension48="best smart plugs" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="78efde6c-db34-4c1b-a966-f82512df9862" data-action="Deal Block" data-label="Echo Show 15 review" data-dimension48="Echo Show 15 review" data-dimension25="$299" href="https://www.amazon.com/dp/B0C5DPSW5Y" 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:65.20%;"><img id="cqUWj2eExAK4UAypD6XpfM" name="Amazon Echo Show 15 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/cqUWj2eExAK4UAypD6XpfM.jpg" mos="" align="middle" fullscreen="" width="1500" height="978" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Echo Show 15 has a large display and adaptive interface with widgets that lets you easily interact with smart home devices. It can even be used a digital picture frame. Read our full <a href="https://www.tomsguide.com/reviews/amazon-echo-show-15" data-dimension112="78efde6c-db34-4c1b-a966-f82512df9862" data-action="Deal Block" data-label="Echo Show 15 review" data-dimension48="Echo Show 15 review" data-dimension25="$299">Echo Show 15 review</a> to learn more.<a class="view-deal button" href="https://www.amazon.com/dp/B0C5DPSW5Y" target="_blank" rel="nofollow" data-dimension112="78efde6c-db34-4c1b-a966-f82512df9862" data-action="Deal Block" data-label="Echo Show 15 review" data-dimension48="Echo Show 15 review" data-dimension25="$299">View Deal</a></p></div><h3 class="article-body__section" id="section-audio-and-home-entertainment"><span>Audio and Home Entertainment </span></h3><div class="product"><a data-dimension112="89fc49ea-5a1a-4e7f-a9e3-e090f5cce5bd" data-action="Deal Block" data-label="JLab JBuds Mini review" data-dimension48="JLab JBuds Mini review" data-dimension25="$38" href="https://www.bestbuy.com/site/jlab-jbuds-mini-true-wireless-earbuds-black/6558680.p?skuId=6558680" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:942px;"><p class="vanilla-image-block" style="padding-top:98.51%;"><img id="MrTFwUu3FnGeJNTSCxXcb3" name="Screenshot 2023-11-29 at 3.14.10 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/MrTFwUu3FnGeJNTSCxXcb3.png" mos="" align="middle" fullscreen="" width="942" height="928" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For just $39 the JBuds Mini wireless earbuds deliver strong performance, and the super-compact design will be attractive to anyone with small ears. Read our full <a href="https://www.tomsguide.com/reviews/Jlab-jbuds-mini" data-dimension112="89fc49ea-5a1a-4e7f-a9e3-e090f5cce5bd" data-action="Deal Block" data-label="JLab JBuds Mini review" data-dimension48="JLab JBuds Mini review" data-dimension25="$38">JLab JBuds Mini review</a> to learn more.<a class="view-deal button" href="https://www.bestbuy.com/site/jlab-jbuds-mini-true-wireless-earbuds-black/6558680.p?skuId=6558680" target="_blank" rel="nofollow" data-dimension112="89fc49ea-5a1a-4e7f-a9e3-e090f5cce5bd" data-action="Deal Block" data-label="JLab JBuds Mini review" data-dimension48="JLab JBuds Mini review" data-dimension25="$38">View Deal</a></p></div><div class="product"><a data-dimension112="e081ecf4-4a86-4833-b5f6-3b69142cfcf4" data-action="Deal Block" data-label="Ultimate Ears Miniroll" data-dimension48="Ultimate Ears Miniroll" data-dimension25="$59" href="https://www.amazon.com/dp/B0DCJ9N5XR/" 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="c7eZDyb9Q5kq7TU3Bc3qNR" name="UE Miniroll prod render" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/c7eZDyb9Q5kq7TU3Bc3qNR.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/audio/bluetooth-speakers/ue-miniroll-review-tiny-but-mighty" data-dimension112="e081ecf4-4a86-4833-b5f6-3b69142cfcf4" data-action="Deal Block" data-label="Ultimate Ears Miniroll" data-dimension48="Ultimate Ears Miniroll" data-dimension25="$59">Ultimate Ears Miniroll</a> is the ultimate musical companion. It’s a super small Bluetooth speaker, so it’ll fit into a backpack without a problem. It’s sturdy too, which will let it survive even the most traumatic of outdoor mishaps. <a class="view-deal button" href="https://www.amazon.com/dp/B0DCJ9N5XR/" target="_blank" rel="nofollow" data-dimension112="e081ecf4-4a86-4833-b5f6-3b69142cfcf4" data-action="Deal Block" data-label="Ultimate Ears Miniroll" data-dimension48="Ultimate Ears Miniroll" data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="80155b3c-78ab-43a1-a011-57138560b3be" data-action="Deal Block" data-label="Apple AirPods 4" data-dimension48="Apple AirPods 4" data-dimension25="$149" href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJ7HYG1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:225px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="SqrmdVjagrzjgHVourtnUW" name="AirPods 4.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/SqrmdVjagrzjgHVourtnUW.jpg" mos="" align="middle" fullscreen="" width="225" height="225" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review" data-dimension112="80155b3c-78ab-43a1-a011-57138560b3be" data-action="Deal Block" data-label="Apple AirPods 4" data-dimension48="Apple AirPods 4" data-dimension25="$149">Apple AirPods 4</a> with Active Noise Cancellation are the best entry-level AirPods to gets These relatively affordable buds work great with all Apple devices and have Find My in the charging case, so no need to worry about it getting lost.<a class="view-deal button" href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJ7HYG1" target="_blank" rel="nofollow" data-dimension112="80155b3c-78ab-43a1-a011-57138560b3be" data-action="Deal Block" data-label="Apple AirPods 4" data-dimension48="Apple AirPods 4" data-dimension25="$149">View Deal</a></p></div><div class="product"><a data-dimension112="1f46636c-7702-4693-806c-15fa8e834a35" data-action="Deal Block" data-label="The super compact Roku Streambar SE is a brilliant little soundbar, perfect for smaller bedroom TVs. It's also packed with Roku streaming, so you don't need a separate streaming box." data-dimension48="The super compact Roku Streambar SE is a brilliant little soundbar, perfect for smaller bedroom TVs. It's also packed with Roku streaming, so you don't need a separate streaming box." data-dimension25="$79" href="https://www.amazon.com/dp/B0CTBF4MKS/" 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:78.60%;"><img id="VBCHcPGQqKcQAhJ2TGT5X9" name="Roku Streambar SE deal.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VBCHcPGQqKcQAhJ2TGT5X9.jpg" mos="" align="middle" fullscreen="" width="1500" height="1179" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The super compact Roku Streambar SE is a brilliant little soundbar, perfect for smaller bedroom TVs. It's also packed with Roku streaming, so you don't need a separate streaming box. <a class="view-deal button" href="https://www.amazon.com/dp/B0CTBF4MKS/" target="_blank" rel="nofollow" data-dimension112="1f46636c-7702-4693-806c-15fa8e834a35" data-action="Deal Block" data-label="The super compact Roku Streambar SE is a brilliant little soundbar, perfect for smaller bedroom TVs. It's also packed with Roku streaming, so you don't need a separate streaming box." data-dimension48="The super compact Roku Streambar SE is a brilliant little soundbar, perfect for smaller bedroom TVs. It's also packed with Roku streaming, so you don't need a separate streaming box." data-dimension25="$79">View Deal</a></p></div><div class="product"><a data-dimension112="06929504-5e97-45c5-882a-fe3d5f2d9d6c" data-action="Deal Block" data-label="Beats Pill" data-dimension48="Beats Pill" data-dimension25="$99" href="https://www.target.com/p/beats-pill-wireless-bluetooth-speaker/-/A-92595737?" 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="FPY4EtJ5Suam26ErQqMFLD" name="Beat Pill Wireless" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FPY4EtJ5Suam26ErQqMFLD.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Beats doesn't just make headphones, there's the <a href="https://www.tomsguide.com/audio/beats-pill-2024-tested-5-things-i-like-3-that-i-dont" data-dimension112="06929504-5e97-45c5-882a-fe3d5f2d9d6c" data-action="Deal Block" data-label="Beats Pill" data-dimension48="Beats Pill" data-dimension25="$99">Beats Pill</a> bluetooth speaker as well! It's a small speaker that can pump out surprisingly rich, spacious audio. Its champagne color makes it look pretty luxurious, too. <a class="view-deal button" href="https://www.target.com/p/beats-pill-wireless-bluetooth-speaker/-/A-92595737?" target="_blank" rel="nofollow" data-dimension112="06929504-5e97-45c5-882a-fe3d5f2d9d6c" data-action="Deal Block" data-label="Beats Pill" data-dimension48="Beats Pill" data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="4e23ff54-71c4-45c9-807a-92cc26a22b9f" data-action="Deal Block" data-label="Sonos Move 2 review" data-dimension48="Sonos Move 2 review" data-dimension25="$499" href="https://www.sonos.com/en-us/shop/move-2-black" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1170px;"><p class="vanilla-image-block" style="padding-top:83.59%;"><img id="YkyYZ2A934HN2ECB6WwsCG" name="Sonos Move deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YkyYZ2A934HN2ECB6WwsCG.jpg" mos="" align="middle" fullscreen="" width="1170" height="978" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This booming battery-powered smart speaker has a long-lasting battery, water-resistance and technology that auto-calibrates the sound to your surroundings. Read my full <a href="https://www.tomsguide.com/reviews/sonos-move-2" data-dimension112="4e23ff54-71c4-45c9-807a-92cc26a22b9f" data-action="Deal Block" data-label="Sonos Move 2 review" data-dimension48="Sonos Move 2 review" data-dimension25="$499">Sonos Move 2 review</a> to read why I love it.<a class="view-deal button" href="https://www.sonos.com/en-us/shop/move-2-black" target="_blank" rel="nofollow" data-dimension112="4e23ff54-71c4-45c9-807a-92cc26a22b9f" data-action="Deal Block" data-label="Sonos Move 2 review" data-dimension48="Sonos Move 2 review" data-dimension25="$499">View Deal</a></p></div><h3 class="article-body__section" id="section-gaming"><span>Gaming</span></h3><div class="product"><a data-dimension112="4e5f7856-94da-42a7-a0bb-82ad7d49f1dd" data-action="Deal Block" data-label="Meta Quest 3S review" data-dimension48="Meta Quest 3S review" data-dimension25="$299" href="https://www.amazon.com/Meta-Quest-128GB-Cardboard-Exclusive-Oculus-dp-B0F2GYMC8H/dp/B0F2GYMC8H" 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="gzEKYhLQHt9zpGkHj4e8gQ" name="Meta Quest 3S" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gzEKYhLQHt9zpGkHj4e8gQ.jpg" mos="" align="middle" fullscreen="" width="2000" height="2000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Meta Quest 3S is one of the best VR headset for gamers, with many of the Quest 3 features in a more affordable package. Read our full <a href="https://www.tomsguide.com/computing/vr-ar/meta-quest-3s-review" data-dimension112="4e5f7856-94da-42a7-a0bb-82ad7d49f1dd" data-action="Deal Block" data-label="Meta Quest 3S review" data-dimension48="Meta Quest 3S review" data-dimension25="$299">Meta Quest 3S review</a> to learn more.<a class="view-deal button" href="https://www.amazon.com/Meta-Quest-128GB-Cardboard-Exclusive-Oculus-dp-B0F2GYMC8H/dp/B0F2GYMC8H" target="_blank" rel="nofollow" data-dimension112="4e5f7856-94da-42a7-a0bb-82ad7d49f1dd" data-action="Deal Block" data-label="Meta Quest 3S review" data-dimension48="Meta Quest 3S review" data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="00b68bf4-7dbd-44e3-92ff-f80d7d7f87e5" data-action="Deal Block" data-label="Nintendo Switch 2" data-dimension48="Nintendo Switch 2" data-dimension25="$449" href="https://www.amazon.com/Nintendo-Switch-2-System/dp/B0F3GWXLTS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:103.11%;"><img id="JmvgbChb3JH9sDxCQuHg3L" name="switch-2-console-box" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JmvgbChb3JH9sDxCQuHg3L.jpg" mos="" align="middle" fullscreen="" width="900" height="928" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-console-review" data-dimension112="00b68bf4-7dbd-44e3-92ff-f80d7d7f87e5" data-action="Deal Block" data-label="Nintendo Switch 2" data-dimension48="Nintendo Switch 2" data-dimension25="$449">Nintendo Switch 2</a> is the long-awaited follow-up to the best-selling hybrid console. Our Editor's Choice pick is an iterative successor to the original Nintendo Switch, offering a home console and handheld experience in one package. It packs new features, including a larger display, redesigned Joy-Cons and more internal power for increased performance.<a class="view-deal button" href="https://www.amazon.com/Nintendo-Switch-2-System/dp/B0F3GWXLTS" target="_blank" rel="nofollow" data-dimension112="00b68bf4-7dbd-44e3-92ff-f80d7d7f87e5" data-action="Deal Block" data-label="Nintendo Switch 2" data-dimension48="Nintendo Switch 2" data-dimension25="$449">View Deal</a></p></div><div class="product"><a data-dimension112="88267e17-3d96-4e12-bb08-ccb6b1512d78" data-action="Deal Block" data-label="PS5 Slim" data-dimension48="PS5 Slim" data-dimension25="$549" href="https://www.bestbuy.com/site/sony-playstation-5-slim-console-white/6566039.p?skuId=6566039" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:900px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="sk4P9G7NmAPRLPEgk4GCBd" name="ps5 slim.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/sk4P9G7NmAPRLPEgk4GCBd.jpg" mos="" align="middle" fullscreen="" width="900" height="900" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The PlayStation 5 Slim, or <a href="https://www.tomsguide.com/gaming/playstation/ps5-slim" data-dimension112="88267e17-3d96-4e12-bb08-ccb6b1512d78" data-action="Deal Block" data-label="PS5 Slim" data-dimension48="PS5 Slim" data-dimension25="$549">PS5 Slim</a> is significantly slimmer than the original. What's more, you don't have to worry about finding stock. You'll be considered a hero for wrapping this up under the tree. <a class="view-deal button" href="https://www.bestbuy.com/site/sony-playstation-5-slim-console-white/6566039.p?skuId=6566039" target="_blank" rel="nofollow" data-dimension112="88267e17-3d96-4e12-bb08-ccb6b1512d78" data-action="Deal Block" data-label="PS5 Slim" data-dimension48="PS5 Slim" data-dimension25="$549">View Deal</a></p></div><div class="product"><a data-dimension112="51f89773-d6a1-4d99-944c-0d8a6b002d14" data-action="Deal Block" data-label="Xbox Series X" data-dimension48="Xbox Series X" data-dimension25="$589" href="https://www.amazon.com/Xbox-X-1TB-Digital/dp/B0DCD9LGHY/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:822px;"><p class="vanilla-image-block" style="padding-top:93.07%;"><img id="guxCB3dAXHJAaeXpNmvrk6" name="515tLyCgdXL._AC_SL1080_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/guxCB3dAXHJAaeXpNmvrk6.jpg" mos="" align="middle" fullscreen="" width="822" height="765" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/xbox-series-x" data-dimension112="51f89773-d6a1-4d99-944c-0d8a6b002d14" data-action="Deal Block" data-label="Xbox Series X" data-dimension48="Xbox Series X" data-dimension25="$589">Xbox Series X</a> is another excellent console gift idea. The stylish black box can run games at 4K resolution at 60 frames per second without breaking a sweat. Plus, <a href="https://www.tomsguide.com/news/xbox-game-pass">Xbox Game Pass</a> is the best subscription service in gaming.<a class="view-deal button" href="https://www.amazon.com/Xbox-X-1TB-Digital/dp/B0DCD9LGHY/" target="_blank" rel="nofollow" data-dimension112="51f89773-d6a1-4d99-944c-0d8a6b002d14" data-action="Deal Block" data-label="Xbox Series X" data-dimension48="Xbox Series X" data-dimension25="$589">View Deal</a></p></div><div class="product"><a data-dimension112="18bdade9-89a5-4935-afa9-15111781ec6f" data-action="Deal Block" data-label="Lego Pac-Mac Arcade" data-dimension48="Lego Pac-Mac Arcade" data-dimension25="$268.5" href="https://www.lego.com/en-us/product/pac-man-arcade-10323" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:944px;"><p class="vanilla-image-block" style="padding-top:107.42%;"><img id="PJnYCnLWouGDbSiw6iK6pU" name="Screenshot 2023-11-29 at 3.54.54 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/PJnYCnLWouGDbSiw6iK6pU.png" mos="" align="middle" fullscreen="" width="944" height="1014" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><a href="https://www.lego.com/en-us/product/pac-man-arcade-10323" target="_blank" rel="nofollow" data-dimension112="18bdade9-89a5-4935-afa9-15111781ec6f" data-action="Deal Block" data-label="Lego Pac-Mac Arcade" data-dimension48="Lego Pac-Mac Arcade" data-dimension25="$268.5"><strong>Lego Pac-Mac Arcade</strong></a><br>The Lego Pac-Mac Arcade isn't technically a piece of tech, but it's a wonderful gift idea for gamers who already have all the gear they possibly need. This 2651-piece set recreates the iconic arcade game with simulated mechanics.<a class="view-deal button" href="https://www.lego.com/en-us/product/pac-man-arcade-10323" target="_blank" rel="nofollow" data-dimension112="18bdade9-89a5-4935-afa9-15111781ec6f" data-action="Deal Block" data-label="Lego Pac-Mac Arcade" data-dimension48="Lego Pac-Mac Arcade" data-dimension25="$268.5">View Deal</a></p></div><h3 class="article-body__section" id="section-lifestyle"><span>Lifestyle</span></h3><div class="product"><a data-dimension112="39e3d7fd-916e-4c0b-a9ed-399ea5c92b99" data-action="Deal Block" data-label="Every day at home can feel like a spa day with this heated foot massager machine. From deep kneading and compression to scraping and rolling, this massager can do it all. Plus, the foot sleeves are washable." data-dimension48="Every day at home can feel like a spa day with this heated foot massager machine. From deep kneading and compression to scraping and rolling, this massager can do it all. Plus, the foot sleeves are washable." data-dimension25="$109" href="https://www.amazon.com/Breo-Massager-Rolling-Kneading-Compression/dp/B085FZVLV8" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1340px;"><p class="vanilla-image-block" style="padding-top:111.94%;"><img id="LzGYHhGGiWRqKfugTjAGHN" name="71R45jdf3NL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LzGYHhGGiWRqKfugTjAGHN.jpg" mos="" align="middle" fullscreen="" width="1340" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Every day at home can feel like a spa day with this heated foot massager machine. From deep kneading and compression to scraping and rolling, this massager can do it all. Plus, the foot sleeves are washable. <a class="view-deal button" href="https://www.amazon.com/Breo-Massager-Rolling-Kneading-Compression/dp/B085FZVLV8" target="_blank" rel="nofollow" data-dimension112="39e3d7fd-916e-4c0b-a9ed-399ea5c92b99" data-action="Deal Block" data-label="Every day at home can feel like a spa day with this heated foot massager machine. From deep kneading and compression to scraping and rolling, this massager can do it all. Plus, the foot sleeves are washable." data-dimension48="Every day at home can feel like a spa day with this heated foot massager machine. From deep kneading and compression to scraping and rolling, this massager can do it all. Plus, the foot sleeves are washable." data-dimension25="$109">View Deal</a></p></div><div class="product"><a data-dimension112="b7427e09-9582-45d9-b259-7a239e78c61b" data-action="Deal Block" data-label="Hatch Restore 3" data-dimension48="Hatch Restore 3" data-dimension25="$169" href="https://www.amazon.com/Hatch-Restore-Sunrise-Alarm-Machine/dp/B0DLLSCVZW" 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.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For the person who hits snooze twelve times, the <a href="https://www.tomsguide.com/wellness/sleep-tech/hatch-restore-3-sunrise-alarm-clock-review" data-dimension112="b7427e09-9582-45d9-b259-7a239e78c61b" data-action="Deal Block" data-label="Hatch Restore 3" data-dimension48="Hatch Restore 3" data-dimension25="$169">Hatch Restore 3</a> is a total game-changer. It’s a sunrise alarm, sound machine, reading light and meditation coach all in one sleek bedside gadget. It lulls you to sleep with soft light and rain sounds, then wakes you gently. This is the definition of a gift that someone didn’t even know how much they needed.<a class="view-deal button" href="https://www.amazon.com/Hatch-Restore-Sunrise-Alarm-Machine/dp/B0DLLSCVZW" target="_blank" rel="nofollow" data-dimension112="b7427e09-9582-45d9-b259-7a239e78c61b" data-action="Deal Block" data-label="Hatch Restore 3" data-dimension48="Hatch Restore 3" data-dimension25="$169">View Deal</a></p></div><div class="product"><a data-dimension112="5f17965a-94f9-4a6a-85cd-0c8fe9f0505e" data-action="Deal Block" data-label="This FDA-approved LED skincare mask uses a combination of light and vibration therapy with proven benefits to enhance the appearance of skin. It's the ultimate gadget for the skin-care guru." data-dimension48="This FDA-approved LED skincare mask uses a combination of light and vibration therapy with proven benefits to enhance the appearance of skin. It's the ultimate gadget for the skin-care guru." data-dimension25="$649" href="https://www.therabody.com/us/en-us/theraface-mask.html" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1246px;"><p class="vanilla-image-block" style="padding-top:100.32%;"><img id="LZZ9EpLYYKXGJh2yPfJcW6" name="Screenshot 2023-12-04 at 10.08.53 AM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LZZ9EpLYYKXGJh2yPfJcW6.png" mos="" align="middle" fullscreen="" width="1246" height="1250" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This FDA-approved LED skincare mask uses a combination of light and vibration therapy with proven benefits to enhance the appearance of skin. It's the ultimate gadget for the skin-care guru.<a class="view-deal button" href="https://www.therabody.com/us/en-us/theraface-mask.html" target="_blank" rel="nofollow" data-dimension112="5f17965a-94f9-4a6a-85cd-0c8fe9f0505e" data-action="Deal Block" data-label="This FDA-approved LED skincare mask uses a combination of light and vibration therapy with proven benefits to enhance the appearance of skin. It's the ultimate gadget for the skin-care guru." data-dimension48="This FDA-approved LED skincare mask uses a combination of light and vibration therapy with proven benefits to enhance the appearance of skin. It's the ultimate gadget for the skin-care guru." data-dimension25="$649">View Deal</a></p></div><div class="product"><a data-dimension112="64d7d7d6-1835-4741-a8e0-e44b343c8bde" data-action="Deal Block" data-label="The Dyson Airstrait isn't your average hair straightener. Its technology powers wet to dry straightening with air — that's right, no hair-damaging hot plates. It's a good alternative gift to the entire Dyson Airwrap system, too." data-dimension48="The Dyson Airstrait isn't your average hair straightener. Its technology powers wet to dry straightening with air — that's right, no hair-damaging hot plates. It's a good alternative gift to the entire Dyson Airwrap system, too." data-dimension25="$549" href="https://www.dyson.com/hair-care/hair-straighteners/airstrait/prussian-blue-rich-copper" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1252px;"><p class="vanilla-image-block" style="padding-top:99.68%;"><img id="KbacFHHKjTojyzPddnU3XZ" name="Screenshot 2023-12-04 at 10.13.15 AM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KbacFHHKjTojyzPddnU3XZ.png" mos="" align="middle" fullscreen="" width="1252" height="1248" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Dyson Airstrait isn't your average hair straightener. Its technology powers wet to dry straightening with air — that's right, no hair-damaging hot plates. It's a good alternative gift to the entire Dyson Airwrap system, too.<a class="view-deal button" href="https://www.dyson.com/hair-care/hair-straighteners/airstrait/prussian-blue-rich-copper" target="_blank" rel="nofollow" data-dimension112="64d7d7d6-1835-4741-a8e0-e44b343c8bde" data-action="Deal Block" data-label="The Dyson Airstrait isn't your average hair straightener. Its technology powers wet to dry straightening with air — that's right, no hair-damaging hot plates. It's a good alternative gift to the entire Dyson Airwrap system, too." data-dimension48="The Dyson Airstrait isn't your average hair straightener. Its technology powers wet to dry straightening with air — that's right, no hair-damaging hot plates. It's a good alternative gift to the entire Dyson Airwrap system, too." data-dimension25="$549">View Deal</a></p></div><h3 class="article-body__section" id="section-fitness"><span>Fitness</span></h3><div class="product"><a data-dimension112="7660fc39-5dc5-4957-b483-907bf9877e90" data-action="Deal Block" data-label="The Theragun Mini Plus is an ultra-portable massager that packs a serious punch. Not only does it offer percussive therapy, but it even has a heat function for even deeper relief. With multiple attachments, it’s the perfect gift for parents, athletes, travelers, or anyone who sits at a desk too long." data-dimension48="The Theragun Mini Plus is an ultra-portable massager that packs a serious punch. Not only does it offer percussive therapy, but it even has a heat function for even deeper relief. With multiple attachments, it’s the perfect gift for parents, athletes, travelers, or anyone who sits at a desk too long." data-dimension25="$279" href="https://www.amazon.com/TheraGun-Mini-Plus-Massage-Therabody/dp/B0FKCSFVLQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1453px;"><p class="vanilla-image-block" style="padding-top:98.28%;"><img id="UHbQE8VcczdwJ9VcXUkmLK" name="61W-eX5pMDL._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/UHbQE8VcczdwJ9VcXUkmLK.jpg" mos="" align="middle" fullscreen="" width="1453" height="1428" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Theragun Mini Plus is an ultra-portable massager that packs a serious punch. Not only does it offer percussive therapy, but it even has a heat function for even deeper relief. With multiple attachments, it’s the perfect gift for parents, athletes, travelers, or anyone who sits at a desk too long.<a class="view-deal button" href="https://www.amazon.com/TheraGun-Mini-Plus-Massage-Therabody/dp/B0FKCSFVLQ" target="_blank" rel="nofollow" data-dimension112="7660fc39-5dc5-4957-b483-907bf9877e90" data-action="Deal Block" data-label="The Theragun Mini Plus is an ultra-portable massager that packs a serious punch. Not only does it offer percussive therapy, but it even has a heat function for even deeper relief. With multiple attachments, it’s the perfect gift for parents, athletes, travelers, or anyone who sits at a desk too long." data-dimension48="The Theragun Mini Plus is an ultra-portable massager that packs a serious punch. Not only does it offer percussive therapy, but it even has a heat function for even deeper relief. With multiple attachments, it’s the perfect gift for parents, athletes, travelers, or anyone who sits at a desk too long." data-dimension25="$279">View Deal</a></p></div><div class="product"><a data-dimension112="a9b06171-6ad1-4984-86fe-b5a00924e748" data-action="Deal Block" data-label="The Apple Watch 11 features an always-on screen that's 2x more scratch resistant than its predecessor. It's powered by Apple's S10 processor and packs an improved 24-hour battery, 5G radio (cellular model only), Sleep Score, and hypertension alerts. It's available in 42mm and 46mm sizes." data-dimension48="The Apple Watch 11 features an always-on screen that's 2x more scratch resistant than its predecessor. It's powered by Apple's S10 processor and packs an improved 24-hour battery, 5G radio (cellular model only), Sleep Score, and hypertension alerts. It's available in 42mm and 46mm sizes." data-dimension25="$-4.5" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminium-Always/dp/B0FQFPB851" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1264px;"><p class="vanilla-image-block" style="padding-top:118.67%;"><img id="zpTresKtjPzk37YdCtdZd9" name="Apple Watch 11 deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/zpTresKtjPzk37YdCtdZd9.jpg" mos="" align="middle" fullscreen="" width="1264" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Apple Watch 11 features an always-on screen that's 2x more scratch resistant than its predecessor. It's powered by Apple's S10 processor and packs an improved 24-hour battery, 5G radio (cellular model only), Sleep Score, and hypertension alerts. It's available in 42mm and 46mm sizes. <a class="view-deal button" href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminium-Always/dp/B0FQFPB851" target="_blank" rel="nofollow" data-dimension112="a9b06171-6ad1-4984-86fe-b5a00924e748" data-action="Deal Block" data-label="The Apple Watch 11 features an always-on screen that's 2x more scratch resistant than its predecessor. It's powered by Apple's S10 processor and packs an improved 24-hour battery, 5G radio (cellular model only), Sleep Score, and hypertension alerts. It's available in 42mm and 46mm sizes." data-dimension48="The Apple Watch 11 features an always-on screen that's 2x more scratch resistant than its predecessor. It's powered by Apple's S10 processor and packs an improved 24-hour battery, 5G radio (cellular model only), Sleep Score, and hypertension alerts. It's available in 42mm and 46mm sizes." data-dimension25="$-4.5">View Deal</a></p></div><div class="product"><a data-dimension112="2349a3fc-07c8-4b1e-a611-664336f87be7" data-action="Deal Block" data-label="Oura Ring 4" data-dimension48="Oura Ring 4" data-dimension25="$349" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WW6RPJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:898px;"><p class="vanilla-image-block" style="padding-top:86.97%;"><img id="aLzAChgZfpqBwPA8uzTyf8" name="Oura Ring 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aLzAChgZfpqBwPA8uzTyf8.jpg" mos="" align="middle" fullscreen="" width="898" height="781" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review" data-dimension112="2349a3fc-07c8-4b1e-a611-664336f87be7" data-action="Deal Block" data-label="Oura Ring 4" data-dimension48="Oura Ring 4" data-dimension25="$349">Oura Ring 4</a> is the latest smart sleep-tracking ring in the brands line up complete with a robust titanium finish to prevent tarnishing. Just Be prepared to pay a monthly subscription of $5.99 to access all features.<a class="view-deal button" href="https://www.amazon.com/Oura-Ring-Tracking-Wearable-Fitness/dp/B0D9WW6RPJ" target="_blank" rel="nofollow" data-dimension112="2349a3fc-07c8-4b1e-a611-664336f87be7" data-action="Deal Block" data-label="Oura Ring 4" data-dimension48="Oura Ring 4" data-dimension25="$349">View Deal</a></p></div><div class="product"><a data-dimension112="c393179a-263e-4c38-8ecd-914aac93f7d2" data-action="Deal Block" data-label="This is much more than a bike helmet — it features Bluetooth connectivity, built-in speakers and mic. That means you can either listen to music on rides, or intercom multiple helmets together when you ride in a group." data-dimension48="This is much more than a bike helmet — it features Bluetooth connectivity, built-in speakers and mic. That means you can either listen to music on rides, or intercom multiple helmets together when you ride in a group." data-dimension25="$159" href="https://www.amazon.com/Sena-Smart-Cycling-Helmet-Matte/dp/B09HYCPS5V/r" 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:62.80%;"><img id="HyZck3v83zap9ttujW8fnA" name="71LIBAmF4FL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HyZck3v83zap9ttujW8fnA.jpg" mos="" align="middle" fullscreen="" width="1500" height="942" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This is much more than a bike helmet — it features Bluetooth connectivity, built-in speakers and mic. That means you can either listen to music on rides, or intercom multiple helmets together when you ride in a group.<a class="view-deal button" href="https://www.amazon.com/Sena-Smart-Cycling-Helmet-Matte/dp/B09HYCPS5V/r" target="_blank" rel="nofollow" data-dimension112="c393179a-263e-4c38-8ecd-914aac93f7d2" data-action="Deal Block" data-label="This is much more than a bike helmet — it features Bluetooth connectivity, built-in speakers and mic. That means you can either listen to music on rides, or intercom multiple helmets together when you ride in a group." data-dimension48="This is much more than a bike helmet — it features Bluetooth connectivity, built-in speakers and mic. That means you can either listen to music on rides, or intercom multiple helmets together when you ride in a group." data-dimension25="$159">View Deal</a></p></div><h3 class="article-body__section" id="section-kitchen-gadgets"><span>Kitchen Gadgets</span></h3><div class="product"><a data-dimension112="704bd2e8-ef61-4653-a198-b3fe4b9f9e28" data-action="Deal Block" data-label="This simple espresso maker is the easiest, and most affordable, way to enjoy a Nespresso machine. This is the gift for someone who perhaps just moved into a new home, or who's aging coffee maker could use an upgrade. Bonus points if you pair it with Nespresso pods." data-dimension48="This simple espresso maker is the easiest, and most affordable, way to enjoy a Nespresso machine. This is the gift for someone who perhaps just moved into a new home, or who's aging coffee maker could use an upgrade. Bonus points if you pair it with Nespresso pods." data-dimension25="$109" href="https://www.amazon.com/Nespresso-Vertuo-Espresso-Machine-DeLonghi/dp/B0C3F2S53N" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1150px;"><p class="vanilla-image-block" style="padding-top:130.43%;"><img id="dudZTVyisLCY2YPjcBkCcg" name="71DG-qZ35sL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dudZTVyisLCY2YPjcBkCcg.jpg" mos="" align="middle" fullscreen="" width="1150" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This simple espresso maker is the easiest, and most affordable, way to enjoy a Nespresso machine. This is the gift for someone who perhaps just moved into a new home, or who's aging coffee maker could use an upgrade. Bonus points if you pair it with Nespresso pods. <a class="view-deal button" href="https://www.amazon.com/Nespresso-Vertuo-Espresso-Machine-DeLonghi/dp/B0C3F2S53N" target="_blank" rel="nofollow" data-dimension112="704bd2e8-ef61-4653-a198-b3fe4b9f9e28" data-action="Deal Block" data-label="This simple espresso maker is the easiest, and most affordable, way to enjoy a Nespresso machine. This is the gift for someone who perhaps just moved into a new home, or who's aging coffee maker could use an upgrade. Bonus points if you pair it with Nespresso pods." data-dimension48="This simple espresso maker is the easiest, and most affordable, way to enjoy a Nespresso machine. This is the gift for someone who perhaps just moved into a new home, or who's aging coffee maker could use an upgrade. Bonus points if you pair it with Nespresso pods." data-dimension25="$109">View Deal</a></p></div><div class="product"><a data-dimension112="1b2b988b-5aaf-4979-bb35-2aa138f8145d" data-action="Deal Block" data-label="What do you get for someone who has every kitchen gadget? We'll guess they don't have a self-stirring popcorn maker. This can make up to 12 cups of popcorn at once, so family movie night is covered." data-dimension48="What do you get for someone who has every kitchen gadget? We'll guess they don't have a self-stirring popcorn maker. This can make up to 12 cups of popcorn at once, so family movie night is covered." data-dimension25="$39" href="https://www.amazon.com/DASH-SmartStoreTM-Stirring-Popcorn-Electric/dp/B0BDSXQCHR" 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:56.73%;"><img id="DvxfJA2P8jfh6ACzsMJumD" name="61KwMnIgSQL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/DvxfJA2P8jfh6ACzsMJumD.jpg" mos="" align="middle" fullscreen="" width="1500" height="851" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>What do you get for someone who has every kitchen gadget? We'll guess they don't have a self-stirring popcorn maker. This can make up to 12 cups of popcorn at once, so family movie night is covered. <a class="view-deal button" href="https://www.amazon.com/DASH-SmartStoreTM-Stirring-Popcorn-Electric/dp/B0BDSXQCHR" target="_blank" rel="nofollow" data-dimension112="1b2b988b-5aaf-4979-bb35-2aa138f8145d" data-action="Deal Block" data-label="What do you get for someone who has every kitchen gadget? We'll guess they don't have a self-stirring popcorn maker. This can make up to 12 cups of popcorn at once, so family movie night is covered." data-dimension48="What do you get for someone who has every kitchen gadget? We'll guess they don't have a self-stirring popcorn maker. This can make up to 12 cups of popcorn at once, so family movie night is covered." data-dimension25="$39">View Deal</a></p></div><div class="product"><a data-dimension112="956523e5-2b72-42ba-a114-ae1633e1e899" data-action="Deal Block" data-label="The Meater Pro is the best wireless thermometer for monitoring the temperature of any kind of protein in any kind of appliance. We think it's great for people who love their outdoor grills and smokers." data-dimension48="The Meater Pro is the best wireless thermometer for monitoring the temperature of any kind of protein in any kind of appliance. We think it's great for people who love their outdoor grills and smokers." data-dimension25="$129" href="https://store-us.meater.com/products/meater-pro" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1098px;"><p class="vanilla-image-block" style="padding-top:94.35%;"><img id="AHpeKryHYm66UQA3VP2LqL" name="Screenshot 2023-11-29 at 4.29.26 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/AHpeKryHYm66UQA3VP2LqL.png" mos="" align="middle" fullscreen="" width="1098" height="1036" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Meater Pro is the best wireless thermometer for monitoring the temperature of any kind of protein in any kind of appliance. We think it's great for people who love their outdoor grills and smokers. <a class="view-deal button" href="https://store-us.meater.com/products/meater-pro" target="_blank" rel="nofollow" data-dimension112="956523e5-2b72-42ba-a114-ae1633e1e899" data-action="Deal Block" data-label="The Meater Pro is the best wireless thermometer for monitoring the temperature of any kind of protein in any kind of appliance. We think it's great for people who love their outdoor grills and smokers." data-dimension48="The Meater Pro is the best wireless thermometer for monitoring the temperature of any kind of protein in any kind of appliance. We think it's great for people who love their outdoor grills and smokers." data-dimension25="$129">View Deal</a></p></div><div class="product"><a data-dimension112="c522ad73-e978-4f64-bc03-a6c161a3c32d" data-action="Deal Block" data-label="Ninja Woodfire Outdoor Oven" data-dimension48="Ninja Woodfire Outdoor Oven" data-dimension25="$299" href="https://www.amazon.com/Ninja-Woodfire-Technology-terracotta-OO101/dp/B0C6BQVDX3/" 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:90.20%;"><img id="C5KWDYUzjspNSP6tT8AAQP" name="81IeXOFExqL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/C5KWDYUzjspNSP6tT8AAQP.jpg" mos="" align="middle" fullscreen="" width="1500" height="1353" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/reviews/ninja-woodfire-outdoor-oven" data-dimension112="c522ad73-e978-4f64-bc03-a6c161a3c32d" data-action="Deal Block" data-label="Ninja Woodfire Outdoor Oven" data-dimension48="Ninja Woodfire Outdoor Oven" data-dimension25="$299">Ninja Woodfire Outdoor Oven</a> is great for making pizzas, smoking wings and many things in between. It's a stellar addition to any outdoor kitchen, but it's also a good fit for small patios and balconies.<a class="view-deal button" href="https://www.amazon.com/Ninja-Woodfire-Technology-terracotta-OO101/dp/B0C6BQVDX3/" target="_blank" rel="nofollow" data-dimension112="c522ad73-e978-4f64-bc03-a6c161a3c32d" data-action="Deal Block" data-label="Ninja Woodfire Outdoor Oven" data-dimension48="Ninja Woodfire Outdoor Oven" data-dimension25="$299">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Membership Competition Terms ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/membership-competition-terms</link>
                                                                            <description>
                            <![CDATA[ Membership Competition Terms ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">bofk2otuT3rvwkfCBzMJuV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/yg9J3Mk8jD8R3LUEpiBiue-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 04 Nov 2025 10:10:55 +0000</pubDate>                                                                                                                                <updated>Mon, 10 Nov 2025 13:34:35 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tom&#039;s Guide ]]></dc:creator>                                                                                                        <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/yg9J3Mk8jD8R3LUEpiBiue-1280-80.png">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Power On To Win]]></media:description>                                                            <media:text><![CDATA[Power On To Win]]></media:text>
                                <media:title type="plain"><![CDATA[Power On To Win]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/yg9J3Mk8jD8R3LUEpiBiue-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>US competition can be <a href="https://www.tomsguide.com/tech/membership-competition">found here</a><br>UK competition can be <a href="https://www.tomsguide.com/uk/tech/membership-competition-uk">found here</a><br><br><br>The prize draw is organised and run by Future Publishing Ltd of Quay House, The Ambury, Bath, BA1 1UA, United Kingdom.</p><p>No purchase is required to enter.</p><p>The prize draw opens at 00:01 GMT on 04/11/25 and closes at 23:59 GMT on 02/12/25. Late or incomplete entries will not be accepted.</p><p>This draw is open to entrants who are over the age of 18 and who are residents in the UK or the US (excluding those in Rhode Island, Guam, Puerto Rico, the U.S. Virgin Islands, U.S. military installations in foreign countries, or any other U.S. territory where prohibited or restricted by law).</p><p>Employees of Future Plc and its group of companies ("Future") may not enter.</p><p>To enter, participants must sign up for membership. Upon registration, entrants will gain access to the competition. Each entrant will have one opportunity to click on a virtual device. If the device powers on, the entrant wins an instant prize. If it does not, they have not won. Only one attempt is permitted per person.</p><p>There will be a total of 23 winners in the UK and 23 winners in the US. The prizes are as follows:</p><p>UK Prizes:<br>Tier 1 – £100.00 Amazon Gift Card (1 winner)  <br>Tier 2 – £50.00 Amazon Gift Card (4 winners)  <br>Tier 3 – £25.00 Amazon Gift Card (8 winners)  <br>Tier 4 – £10.00 Amazon Gift Card (10 winners)  <br>Total UK value: £600.00<br><br>US Prizes:<br>Tier 1 – $100.00 Amazon Gift Card (1 winner)  <br>Tier 2 – $50.00 Amazon Gift Card (4 winners)  <br>Tier 3 – $25.00 Amazon Gift Card (8 winners)  <br>Tier 4 – $10.00 Amazon Gift Card (10 winners)  <br>Total US value: $600.00 (approx. £450.00)</p><p>Total prize value: £1,050.00</p><p>Winners will be instantly notified if they have won. Future will send a confirmatory email within 3 days, which will contain redemption arrangements for any digital prizes. Winners must claim their prize within <strong>7 days</strong> of being notified. If a prize is not claimed within this period, the organiser reserves the right to withdraw the prize and select an alternative winner or redistribute it as appropriate.</p><p>Future reserves the right to substitute any prize with an alternative of equivalent value.</p><p>The prize is non-transferable and non-refundable, with no cash alternative available.</p><p>Any person winning $600 or more in prizes within a calendar year will receive an Internal Revenue Service (IRS) Form 1099 after the year's end, and a copy will be filed with the IRS. Prize values may be taxable as income, and each winner is solely responsible for all applicable federal, state, and local taxes.</p><p>Future accepts no responsibility for entries not completed due to a technical fault (technical malfunction, computer hardware or software failure, satellite, network or server failure) of any kind OR if, for any reason, a technical interruption, fault, or site failure occurs when participating.</p><p>By participating in this prize draw, you agree to these terms and conditions, the competition rules at www.futureplc.com/competition-rules/, and the collection of personal data in accordance with Future’s privacy policy at https://www.futureplc.com/privacy-policy/.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Membership Competition UK ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/membership-competition-uk</link>
                                                                            <description>
                            <![CDATA[ Membership Competition UK ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YZAX7th2g5MgVwEXQrMPNk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/MfXPY57HKzXVTHxLoEuCxc-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Tue, 04 Nov 2025 10:10:47 +0000</pubDate>                                                                                                                                <updated>Thu, 13 Nov 2025 15:10:53 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tom&#039;s Guide ]]></dc:creator>                                                                                                        <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/MfXPY57HKzXVTHxLoEuCxc-1280-80.png">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Membership Page Comp Banner]]></media:description>                                                            <media:text><![CDATA[Membership Page Comp Banner]]></media:text>
                                <media:title type="plain"><![CDATA[Membership Page Comp Banner]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/MfXPY57HKzXVTHxLoEuCxc-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-W02BNX"></div>                            </div>                            <script src="https://kwizly.com/embed/W02BNX.js" async></script>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Chipolo Pop review: A great Android alternative to Apple's AirTag ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/chipolo-pop-review</link>
                                                                            <description>
                            <![CDATA[ The Chipolo Pop brings a loud alarm and support for the find networks offered to both iPhone and Android devices. Through in some colorful options and an easy-to-attach design, and this is a good choice if you want a reliable key finder. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">eCZED9WsWUyYyYBheAWGP5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/cSX9NMu4uNCYEH6xiCmF4m-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Oct 2025 15:46:02 +0000</pubDate>                                                                                                                                <updated>Thu, 04 Jun 2026 12:51:34 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/cSX9NMu4uNCYEH6xiCmF4m-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[chipolo pop and Apple airtag in front of garden background]]></media:description>                                                            <media:text><![CDATA[chipolo pop and Apple airtag in front of garden background]]></media:text>
                                <media:title type="plain"><![CDATA[chipolo pop and Apple airtag in front of garden background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/cSX9NMu4uNCYEH6xiCmF4m-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When you're on the hunt for the <a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html">best key finders</a>, don't<a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html"> </a>overlook Chipolo, especially if you've got an Android phone. Chipolo's trackers like the Chipolo Pop that I use can connect to Google's Find Hub, so that other nearby Android phones can help find any tagged item you've lost.</p><div  class="fancy-box"><div class="fancy_box-title">Chipolo Pop Specs</div><div class="fancy_box_body"><p class="fancy-box__body-text">• <strong>Size: </strong>1.53 inches in diameter<br>•<strong> Listed range:</strong> 300 feet<br>• <strong>Tested range: </strong>35 feet<br>• <strong>Water resistance:</strong> IP55<br>• <strong>Battery:</strong> Replaceable CR2032<br>• <strong>Colors:</strong> 6 options</p></div></div><p>The Chipolo Pop offers more than just added coverage for Android users. This tracker works with Apple's Find My feature, too, so it's just as valuable to iPhone owners. Other appealing features include helpful out-of-range alerts, a loud alarm and some eye-catching colors that will make your key finder stand out.</p><p>My Chipolo Pop review takes a closer look at why this Bluetooth tracking devices belongs on the end of your keychain.</p><h3 class="article-body__section" id="section-chipolo-pop-review-price-and-availability"><span>Chipolo Pop review: Price and availability</span></h3><p>The Chipolo Pop costs $29, which is a few dollars more than the <a href="https://www.tomsguide.com/tech/tile-mate-2024-review">Tile Mate</a>, our top pick among key finders, but $6 cheaper than the more fully featured <a href="https://www.tomsguide.com/tech/tile-pro-2024-review">Tile Pro</a>. </p><p>Apple also charges $29 for its <a href="https://www.tomsguide.com/reviews/apple-airtags">AirTag</a> key finder, though that device only works with iPhones. The Chipolo Pop is compatible with both the iPhone and Android devices. </p><p>The AirTag and Tile Pro feature just one color option, while Chipolo recognizes that variety is the spice of life. You can pick between six different colors — blue, yellow, red, green, white and black — and you can buy Chipolo Pops in packs of four and six at a slight discount.</p><h3 class="article-body__section" id="section-chipolo-pop-review-design-and-features"><span>Chipolo Pop review: Design and 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:2151px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Gtq5SWgWqURH4uPprhjnjm" name="PXL_20250811_104353313" alt="chipolo pop and Apple airtag in front of garden background" src="https://cdn.mos.cms.futurecdn.net/Gtq5SWgWqURH4uPprhjnjm.jpg" mos="" align="middle" fullscreen="" width="2151" height="1210" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Chipolo has long been in the tracking fob business, comparing well to trackers from Tile, Apple and Samsung. The Pop continues that tradition.</p><p>It's a circular fob, 1.53 inches in diameter and roughly a quarter-inch thick. That makes it a little bit larger than the 1.26-inch AirTag, though Apple's tracker is marginally thicker than the Chipolo Pop.</p><p>The bottom line is that the Chipolo Pop doesn't add unnecessary bulk to your key chain. I also appreciate that it comes with a keyring hole, which made it easy to attach to my keys.</p><p>For the most part, the Pop acts much like any other key finder. If you lost it, or you need to make sure it is where you think it is, you simply head into your finder app and hunt it down — and force it to play a sound if you still don't know where it is. </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:59.79%;"><img id="zazJpV6ptPdMeAYWnksGW8" name="chipolo-screens" alt="Chipolo pop software with Google Find Hub" src="https://cdn.mos.cms.futurecdn.net/zazJpV6ptPdMeAYWnksGW8.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Chipolo offers its own app (<a href="https://play.google.com/store/apps/details?id=chipolo.net.v3&hl=en_US" target="_blank" rel="nofollow">Android</a>, <a href="https://apps.apple.com/us/app/chipolo/id651447811" target="_blank" rel="nofollow">iOS</a>), and you can also connect to Google's Find Hub or Apple's Find My, though not at the same time. Nevertheless, from your phone, you're able to tap a button to make the Chipolo Pop sound an alarm to help you find your lost item.</p><p>And take it from me — you're definitely going to hear that alarm. Chipolo says it's rated at 120 decibels, making it among the loudest key finders we've tested. I certainly have no problem hearing the alert over any background noise.</p><p>The Chipolo Pop runs on the same CR2032 coin battery as the AirTag, which is supposed to last around a year before it needs replacing. And, like Apple, it alerts you when you leave it behind — <a href="https://www.tomsguide.com/reviews/tile-pro-key-finder">a feature Tile prefers to charge you for</a>.</p><h3 class="article-body__section" id="section-chipolo-pop-review-peformance"><span>Chipolo Pop review: Peformance</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:2170px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="yx2ymQuRBQ3LY8DXXYiDkm" name="PXL_20250811_104239678" alt="chipolo pop and Apple airtag in front of garden background" src="https://cdn.mos.cms.futurecdn.net/yx2ymQuRBQ3LY8DXXYiDkm.jpg" mos="" align="middle" fullscreen="" width="2170" height="1221" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Chipolo Pop lacks something you'll find on trackers like the AirTag and Samsung's <a href="https://www.tomsguide.com/tech/samsung-galaxy-smarttag-2-review">Galaxy SmartTag 2</a> — Ultra Wideband support. That feature offers more precise location tracking, so if that's a must-have for you, you'll want to consider alternatives to the Chipolo Pop.</p><p>Instead, the Pop uses its Bluetooth connection and loud alarm to help you find lost items. Chipolo says range is around 300 feet, though in my test, 35 feet was a more common range. That difference between promised and actual range is not uncommon for key trackers, incidentally — the Tile Mate lists a range of 350 feet that was closer to 65 feet in our testing. Still, the Chipolo Pop's performance was on the shorter end of devices we've tested.</p><p>I do think the alerts the Chipolo Pop sends to your phone when you go out of range are helpful, and if you double-press the Pop, you can sound an alarm on your phone for nifty two-way find capabilities. The Chipolo Pop can also double as a remote shutter button for your phone's camera, too, though only via the Chipolo app and not the phone's main camera app.</p><h3 class="article-body__section" id="section-chipolo-pop-review-verdict"><span>Chipolo Pop 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nwDkMJxDAQL8bTGtaSkSh8" name="chipolo-pop-in-hand" alt="Chipolo Pop on keychain in hand" src="https://cdn.mos.cms.futurecdn.net/nwDkMJxDAQL8bTGtaSkSh8.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There are a lot of options if you're looking for some kind of tracker for your stuff. They all have their respective pros and cons, like special features or the ability to loop into Google and Apple's own tracking networks.</p><p>Naturally as someone who primarily uses Android phones, an AirTag has limited value for me. Having an Android friendly option is considerably more convenient, especially if it means not <a href="https://www.tomsguide.com/tech/the-airtag-in-my-suitcase-failed-me-when-i-needed-it-most-but-it-was-entirely-my-fault">keeping it hidden in my suitcase 90% of the time.</a></p><p>The Chipolo Pop may not be the most advanced key finder out there, but it does what it needs to do, and with a few extra features rolled in to sweeten the deal.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Buttonless iPhone on the horizon, massive Amazon layoffs and more: today's Tech News LIVE ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/news/live/tech-news-today-live-updates-10-28-2025</link>
                                                                            <description>
                            <![CDATA[ The tech world moves fast, and we're following it closely to bring you the biggest stories as they happen. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">MyhAUSJC4Wpjsad35bLuoH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PuHCN8Pt2yPDfQcsrPYcKZ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 28 Oct 2025 13:29:50 +0000</pubDate>                                                                                                                                <updated>Tue, 28 Oct 2025 16:56:45 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ dave.leclair@futurenet.com (Dave LeClair) ]]></author>                    <dc:creator><![CDATA[ Dave LeClair ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/fyx7qYdxPMTNBhdnMfNmaB.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Senior News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/PuHCN8Pt2yPDfQcsrPYcKZ-1280-80.jpg">
                                                            <media:credit><![CDATA[Samsung / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Images of products]]></media:description>                                                            <media:text><![CDATA[Images of products]]></media:text>
                                <media:title type="plain"><![CDATA[Images of products]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PuHCN8Pt2yPDfQcsrPYcKZ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In the battle of AI vs humans, humans just lost another round. Amazon has announced that it's laying off a whopping 14,000 corporate workers as it accelerates its AI push. </p><p>And that's just one of the biggest tech headlines we're following today here at Tom's Guide.</p><p>We may have just gotten our first look at the <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-tri-fold-7-biggest-rumors-so-far">Samsung Galaxy Tri-Fold</a>, which has already been tipped to launch this year. Meanwhile, OpenAI is being attacked on multiple fronts from both Anthropic and Google Gemini. And we're tracking the best early Black Friday tech deals, including 50% off sales at Amazon and Walmart.</p><p>Here's the biggest tech news you need to know right now, with updates all day as new stories break.</p><h3 class="article-body__section" id="section-today-s-tech-news-live-updates-as-they-happen"><span>Today's tech news — Live updates as they happen</span></h3><h2 id="samsung-tri-fold-leaks-in-full">Samsung Tri-fold leaks in full</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:800px;"><p class="vanilla-image-block" style="padding-top:47.13%;"><img id="pdvvBtDoLWFPqvdrA7iLoj" name="ezgif-5076454e9b93db" alt="samsung galaxy tri-fold folding design gif" src="https://cdn.mos.cms.futurecdn.net/pdvvBtDoLWFPqvdrA7iLoj.gif" mos="" align="middle" fullscreen="" width="800" height="377" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Weibo)</span></figcaption></figure><p>Samsung hasn't done the best job keeping its tri-fold smartphone under wraps. It seems like once a week, something significant comes out, telling us more about the device. It's almost like the company could be drip-feeding information to build anticipation. Or it just has a leaker putting information out to the world.</p><p>The latest leak provides a full first look at the Samsung Galaxy Tri-Fold. Noted leaker Ice Universe shared the latest images, which show off Samsung's worst-kept secret: the full-triple-screen display and the folded version of the phone. </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:1795px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="naZV87bNhYYiruPuMWHC4h" name="Screenshot 2025-10-28 104908" alt="Samsung Galaxy tri-fold ice universe" src="https://cdn.mos.cms.futurecdn.net/naZV87bNhYYiruPuMWHC4h.png" mos="" align="middle" fullscreen="" width="1795" height="1010" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Ice Universe)</span></figcaption></figure><p>And it's not just one leak. Korean news outlet <a href="https://www.dailian.co.kr/news/view/1564963/" target="_blank">Dailian</a> also published what appear to be images of the same large-screen device, while <a href="https://www.androidauthority.com/samsung-galaxy-tri-fold-leak-3610686/" target="_blank">Android Authority</a> found a video of the same display that has a watermark from an unknown Weibo account. Three leaks in one day for the same device is quite impressive and might be the most I've ever seen — and it's still early in the morning in the U.S. </p><p>In the video, we can see the device unfold from the middle panel and fold back in on itself. It's a design I wasn't quite expecting, but it's interesting nevertheless. </p><p>We'll have to wait for Samsung to officially announce the device to know for sure if what we're seeing here is real, but for the time being, it all looks legitimate enough, especially with reliable sources like IceUniverse and Android Authority providing the leaks.</p><p><strong></strong><a href="https://www.tomsguide.com/phones/samsung-phones/heres-our-first-look-at-the-samsung-galaxy-tri-fold-and-everything-we-can-figure-out-from-it" target="_blank"><strong>Read More</strong></a></p><h2 id="could-openai-lose-the-ai-race">Could OpenAI lose the AI race?</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:4080px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JJRERgoMoG89VPQroNSv3h" name="shutterstock_2443144493-2" alt="Claude on phone with Anthropic logo in the background" src="https://cdn.mos.cms.futurecdn.net/JJRERgoMoG89VPQroNSv3h.jpg" mos="" align="middle" fullscreen="" width="4080" height="2295" 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>As unlikely as it seems, OpenAI appears to be losing the AI race to Anthropic, as the underdog appears to be on the rise. Anthropic and its Claude chatbot may keep a lower profile than OpenAI's ChatGPT, but don't let that fool you — it's a serious contender in the space.</p><p>Instead of image generation and videos, Anthropic focuses on like <a href="https://www.tomsguide.com/ai/i-write-about-ai-for-a-living-and-vibe-coding-is-going-to-change-everything-heres-why">vibe coding</a> (writing code with AI prompts), logical reasoning, and helping to perfect academic writing. They're very different use cases, but it seems to be helping Anthropic move ahead in some big ways.</p><p>What really separates the two companies is where their income comes from — OpenAI gets as much as 70% of its revenue from consumers. Anthropic, on the other hand, has stated that roughly 80% of its revenue comes from corporate partners. Those are very different business models. </p><p>And with those business models, Anthropic has a run rate of $7 billion, compared to OpenAI’s $9 billion by the end of this year. Even though Anthropic is smaller, it's making massive profits with its business partnerships.</p><p>Because OpenAI relies on a more fickle public, it needs to develop new tools, features, and add-ons. Compared to Anthropic, the company consistently releases new features for ChatGPT while Claude sees a much slower rollout.</p><p>It might not be a flashy approach, or one that draws the same attention as OpenAI, but Anthropic might have the answer many companies are looking for: how do you make money in the world of AI? The answer could be business-to-business.</p><p><a href="https://www.tomsguide.com/ai/anthropic-is-leading-the-ai-race-and-its-all-thanks-to-this-one-problem-openai-cant-solve" target="_blank"><strong>Read More</strong></a></p><h2 id="ai-is-taking-jobs-at-amazon">AI is taking jobs at Amazon</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="vC9P2bqda3PziJheWYNmd" name="Amazon.shutterstock_1538930117" alt="Amazon logo on a building" src="https://cdn.mos.cms.futurecdn.net/vC9P2bqda3PziJheWYNmd.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Amazon is set to make 14,000 humans redundant as it "innovates much faster" thanks to AI. That's a lot of jobs lost to AI, which is a fear many people have expressed as AI becomes smarter and more useful.</p><p>These cuts are believed to be focused on Amazon's corporate roles rather than on warehouse or delivery staff, and they take hold as the company looks to streamline its operations through the power of AI.</p><p>A memo to Amazon staff from Beth Galetti, Senior Vice President of People Experience and Technology at Amazon, shared the bad news. </p><p>"Some may ask why we’re reducing roles when the company is performing well," she wrote.</p><p>"What we need to remember is that the world is changing quickly. This generation of AI is the most transformative technology we’ve seen since the Internet, and it's enabling companies to innovate much faster than ever before (in existing market segments and altogether new ones)," the memo continued.</p><p>"We’re convicted that we need to be organized more leanly, with fewer layers and more ownership, to move as quickly as possible for our customers and business."</p><p>As nice as it sounds to "remember that the world is changing," that doesn't help the 14,000 people who are or will be jobless in the near future. On the bright side, the company says it will give affected employees 90 days to find a new role, and those unable to do so will receive severance pay, outplacement services, and health insurance benefits. While this will soften the blow compared to some layoffs where no extra time is given, it's still going to put a strain the job market and cause tremendous stress for the affected individuals.</p><p><a href="https://www.tomsguide.com/ai/amazon-set-to-make-up-to-14-000-humans-redundant-as-it-innovates-much-faster-with-ai" target="_blank"><strong>Read More</strong></a></p><h2 id="iphone-18-a-reason-to-go-pro">iPhone 18 — a reason to go pro</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:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3AtKai2daxEQnsyYJVZpdi" name="iPhone 17 Pro and Max-17" alt="iPhone 17 Pro and Pro Max" src="https://cdn.mos.cms.futurecdn.net/3AtKai2daxEQnsyYJVZpdi.jpg" mos="" align="middle" fullscreen="" width="3840" height="2160" 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>We're only a month into the iPhone 17's life, but that hasn't stopped leakers from already releasing information about the iPhone 18. According to leaker Digital Chat Station, a variable aperture camera could be coming to the iPhone 18 Pro Max. However, the game-changing camera feature may not be available on the iPhone 18 Pro as rumors previously suggested.</p><p>Generally, Apple keeps the differences between the Pro and Pro Max pretty subtle, focusing more on size than features (this isn't always the case, but in recent models it has been). For such a huge camera feature to be left behind would be surprising. Of course, we're almost a year away from the phones launching, so anything could change between now and then.</p><p><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-18-rumored-to-get-variable-aperture-lens-on-main-camera-why-that-matters">Variable aperture</a> means the user can adjust the amount of light entering the camera lens, which can be a big upgrade for photographs.</p><p><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-max-camera-may-get-this-major-upgrade-but-why-isnt-iphone-18-pro-getting-it-too" target="_blank"><strong>Read More</strong></a></p><h2 id="new-fitbit-on-the-way">New Fitbit on the way</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:3790px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="n5FKTsawUjSGD8VyN8SHVg" name="BestFitibit-25-26" alt="Close-up of the Pixel Watch 4, Fitbit Charge 6 and Gamin Vivoactive 6" src="https://cdn.mos.cms.futurecdn.net/n5FKTsawUjSGD8VyN8SHVg.jpg" mos="" align="middle" fullscreen="" width="3790" height="2132" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Dan Bracaglia/Tom's Guide)</span></figcaption></figure><p>Google has said that Fitbit is working on new hardware with a 2026 release window. Additionally, the Fitbit app is getting a massive AI overhaul, which should come as no surprise.</p><p>When Google says new Fitbit hardware is coming, does that mean an update to an existing Fitbit model, or an entirely new Fitbit form factor? Time will tell, but it's likely an update of an existing model.</p><p>The app update sounds promising, seamlessly integrating a Gemini-powered AI wellness coach into a more visually appealing platform with friendlier graphs, more intelligently organized data, and enhanced user customization. </p><p><a href="https://www.tomsguide.com/wellness/fitness-trackers/google-says-new-fitbit-hardware-is-coming-in-2026" target="_blank"><strong>Read More</strong></a></p><h2 id="nvidia-live-news">Nvidia live news</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="zRkHt66BqQZ82PNnXPcapC" name="Nvidia GeForce RTX 4070 chip" alt="Nvidia GeForce RTX 4070 chip on black background" src="https://cdn.mos.cms.futurecdn.net/zRkHt66BqQZ82PNnXPcapC.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nvidia)</span></figcaption></figure><p>If you can't get enough live news, we're also covering the Nvidia GTC event live. The Nvidia CEO Jensen Huang will share what’s next for AI, robotics and GPUs, so exciting things are ahead.</p><p>Specifics of GTC announcements are kept pretty secret until Jensen takes the stage. But as we've learnt from the past three keynotes, it's worth paying attention to where the $4 trillion is right now — both in product development and (specifically) the location where the keynote is being held.</p><p><a href="https://www.tomsguide.com/computing/live/nvidia-gtc-october-2025-live" target="_blank"><strong>Follow along live</strong></a></p><h2 id="no-more-buttons-on-iphone">No more buttons on iPhone?! </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HpQhszZX6MChtZcTeed92J" name="iPhone 17 vs iPhone Air-3" alt="iPhone 17 and iPhone Air thickness compared" src="https://cdn.mos.cms.futurecdn.net/HpQhszZX6MChtZcTeed92J.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>This is a bit of news I didn't expect to see, but according to a new report from leaker Instant Digital, Apple might ditch the button on the 20th-anniversary iPhone. The company will instead use haptics to perform the same functions that buttons would. </p><p>The leak says that Apple's solid-state button design has completed functional verification. The update would replace the Side button, volume buttons, Action button, and Camera Control button with haptic feedback.</p><p>If this rumor is correct, the current design will integrate buttons directly into the device frame with zero physical movement when pressed. However, the report also says that Apple wants to make these buttons feel like real buttons, using the back panel or frame to produce audio, combined with an AI-based sound compensation algorithm. </p><p>It sounds interesting, and it could open the door to a wraparound display. It could also be annoying for those used to real buttons, depending on how well Apple makes it feel authentic. </p><h2 id="gemini-also-catching-chatgpt">Gemini also catching ChatGPT</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wDUATUTpPSFY8y4n9UB4De" name="gemini.shutterstock_2570446691" alt="Gemini logo on smartphone with the Google logo behind" src="https://cdn.mos.cms.futurecdn.net/wDUATUTpPSFY8y4n9UB4De.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Google has made significant improvements to Gemini recently. As such, the chatbot is rapidly becoming more popular. In fact, Google's Gemini domain, gemini.google.com, has more than doubled over the past year, according to new data from data aggregation company <a href="https://x.com/Similarweb/status/1979863740670480674?utm_source=superhuman&utm_medium=newsletter&utm_campaign=chatgpt-for-doctors-hits-6b-valuation&_bhlid=8a5477cec0b0f023fc6a017f6a2c42f225b246c7" target="_blank">Similarweb</a>.</p><p>In total, the Gemini webpage now makes 12.9% of total web traffic to generative AI tools. That's bumped from 6.4% in 2024. </p><p>And as good as that sounds, ChatGPT makes 74% of total chatbot web traffic, absolutely dwarfing Google and all of the other big players in the space. But doubling the views is nothing to scoff at, and it shows that at least some users are willing to migrate if they don't like ChatGPT's results.</p><p>Traffic to xAI's Grok has dropped from 3.1% to 2%. While it's a small amount, when the service was already so low in total traffic to begin with, it's almost certainly noticeable for the Musk-backed AI tool. Microsoft Copilot hasn't changed much, currently accounting for 1.2% of total generative AI traffic according to Similarweb's data..</p><h2 id="pro-ipad-apps">Pro iPad apps</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gg3FL9fcAZKMxSt47aMixC" name="iPad Pro M5--05" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/gg3FL9fcAZKMxSt47aMixC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The iPad looks to be receiving some new apps in the near future, as a rumor has emerged suggesting that Apple plans to release four new apps targeted at pro users.</p><p>According to a report from MacRumors, four apps have "new App Store IDs," which is usually a sign that they're on the way. </p><p>Here are the apps: </p><ul><li>Compressor: A tool for media encoding and delivery used to customize how media is exported in Final Cut</li><li>Motion: A motion graphics tool for creating titles, transitions, and visual effects that work with Final Cut</li><li>MainStage: A companion app for Logic Pro used for live performances and customizable on-stage instrument and vocal setups</li><li>Pixelmator Pro: An upgrade to the free Pixelmator iPad app with features more like the Mac version.</li></ul><p>While the clues are there for the app names and functions, there's no rumored date for these apps to hit iPad but we'll keep an eye out for you.</p><h2 id="biggest-story-so-far">Biggest story so far?</h2><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4b74O"></div>                            </div>                            <script src="https://kwizly.com/embed/e4b74O.js" async></script><h2 id="galaxy-z-fold8-details-potentially-emerge">Galaxy Z Fold8 details potentially emerge</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mMrDpLDhYeu5yW3kUfwXHT" name="Z fold 7 Gemini" alt="Galaxy Z Fold 7 gemini" src="https://cdn.mos.cms.futurecdn.net/mMrDpLDhYeu5yW3kUfwXHT.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>If you're looking forward to Samsung's next round of foldable phones, you have a bit of waiting left to do. But if you're starved for details, the latest leak provides specs on the screen and battery capacity, both critical to the phone's performance.</p><p>The leak (via <a href="https://www.gsmarena.com/galaxy_z_fold8_display_and_battery_details_leaked-news-70055.php" target="_blank">GSM Arena</a>) suggests that Samsung will use a new ‘laser-drilling metal plate technology’ for the Galaxy Z Fold8's hinge, which could reduce the crease, one of the things holding many back from adopting the foldable lifestyle.</p><p>The rumor claims the battery will be more than 5,000 mAh, a significant bump from the Galaxy Z Fold7's 4,400 mAh cell. </p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How the AWS outage happened — and why it's broke the internet  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/how-the-aws-outage-happened-and-why-its-breaking-the-internet</link>
                                                                            <description>
                            <![CDATA[ A massive AWS outage took down parts of the internet today — from Alexa and Snapchat to Fortnite and banking apps. Here’s what really happened, and why one small glitch caused such big chaos. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">MyprN6R5RUMcjZHcp348FA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SYq8hTpCqCrXJvtHE4wzxN-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 20 Oct 2025 18:06:57 +0000</pubDate>                                                                                                                                <updated>Tue, 21 Oct 2025 13:49:19 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ amanda.caswell@futurenet.com (Amanda Caswell) ]]></author>                    <dc:creator><![CDATA[ Amanda Caswell ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/bpYbd7AokUKfGGbNp8LHka.png ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/SYq8hTpCqCrXJvtHE4wzxN-1280-80.jpg">
                                                            <media:credit><![CDATA[Sundry Photography | Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Close up of AWS sign at their offices in SOMA district]]></media:description>                                                            <media:text><![CDATA[Close up of AWS sign at their offices in SOMA district]]></media:text>
                                <media:title type="plain"><![CDATA[Close up of AWS sign at their offices in SOMA district]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SYq8hTpCqCrXJvtHE4wzxN-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Early Monday morning, October 20, 2025, millions of users woke up to broken apps, frozen devices and websites that simply wouldn’t load as a result of an <a href="https://www.tomsguide.com/news/live/amazon-outage-october-2025">AWS outage we're tracking live</a>. Services like <a href="https://www.tomsguide.com/news/live/snapchat-outage-live-october-20">Snapchat</a>, Ring, Alexa, Fortnite and even some online banking services went dark for several hours — all because of one cloud region in Northern Virginia.</p><p>AWS says the culprit was a DNS issue inside its DynamoDB service, which caused a chain reaction that rippled across the web. In simpler terms: one of the internet’s core address books temporarily lost track of where critical servers lived. Here’s how it happened — and why the effects were so massive.</p><h2 id="a-small-failure-in-a-big-place">A small failure in a big place</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="RUWx2p9pXDJg8i4FegKFuB" name="connections in a data center.jpg" alt="Connections plugged into a server in a data center" src="https://cdn.mos.cms.futurecdn.net/RUWx2p9pXDJg8i4FegKFuB.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>Around 3:10 a.m. ET, engineers at AWS’s us-east-1 data center (its busiest region) started seeing errors pile up. DynamoDB, a key database service used by thousands of apps, suddenly couldn’t be reached because its DNS records weren’t resolving.<br><br>If DNS is like the contact list of the internet, then this was a case of missing every number at once. Apps couldn’t find their databases. Websites couldn’t reach their login systems. Smart home devices couldn’t even phone home.</p><p>AWS said the problem was fully mitigated by 5:24 a.m. ET, but not before millions of requests failed, backups formed and connected services began to buckle under retries.</p><h2 id="the-domino-effect-of-a-cloud-collapse">The domino effect of a cloud collapse</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="hcGNtkdcTb7hJSkxmfLfV8" name="cloud-service-hero---Shutterstock.jpg" alt="Best Cloud Backup Services 2019" src="https://cdn.mos.cms.futurecdn.net/hcGNtkdcTb7hJSkxmfLfV8.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>Although AWS is Amazon’s own cloud computing backbone, it powers far more than Amazon itself. Companies across the world rely on its servers, storage and databases to stay online — including many services you probably use every day.</p><p>When DynamoDB went down, so did the services built on top of it. That included streaming apps, online games, and even smart devices like Alexa speakers and Ring doorbells.</p><p>And because AWS’s Northern Virginia region also handles core management tasks for the platform, the failure spread quickly. Even companies hosting data in other AWS regions still depend on us-east-1 for certain background operations. So, when it hiccups, everyone feels it.</p><p>Put simply, this wasn’t one company going down. It was part of the internet’s backbone falling out from under it.</p><h2 id="why-dns-problems-hit-harder-than-most">Why DNS problems hit harder than most</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="29dmR5MpipRsceh3WVc54H" name="aws outage edit 2" alt="Venmo, Amazon and AWS logos" src="https://cdn.mos.cms.futurecdn.net/29dmR5MpipRsceh3WVc54H.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>DNS (Domain Name System) is what turns a readable name — like <a href="http://amazon.com/" target="_blank">amazon.com</a> — into a numeric address computers use to talk to each other. When it fails, the internet stops working.</p><p>Most cloud services have backups and failover plans, but DNS issues are notoriously sneaky. They can make systems look healthy on the surface while silently blocking connections underneath. So when DynamoDB’s address stopped resolving, many apps didn’t even know where to send their data.</p><p>It’s like losing GPS for every delivery truck on the road — everything stalls, even if the trucks still work.</p><h2 id="what-amazon-says-now">What Amazon says now</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:559px;"><p class="vanilla-image-block" style="padding-top:109.12%;"><img id="jN89qmc8GB4MzmehnLnVGo" name="Screenshot 2025-10-20 at 1.33.43 PM" alt="Down Detector reports" src="https://cdn.mos.cms.futurecdn.net/jN89qmc8GB4MzmehnLnVGo.png" mos="" align="middle" fullscreen="" width="559" height="610" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Down Detector)</span></figcaption></figure><p>By late morning, AWS said that “most service operations are succeeding normally” and that the DNS problem was fully resolved. Still, some companies saw lingering slowdowns and needed to manually reboot parts of their systems.</p><p>AWS confirmed that no cyberattack was involved, and early signs point to a configuration or propagation error inside the DNS layer for DynamoDB. The company is still preparing a full post-incident report.</p><h2 id="the-bottom-line">The bottom line</h2><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/ai/7-prompts-i-use-for-every-ai-chatbot-and-they-work-for-just-about-everything"><strong>7 prompts I use for every AI chatbot — and they work for just about everything</strong></a></li><li><a href="https://www.tomsguide.com/ai/youre-probably-not-using-this-chatgpt-feature-but-it-can-make-you-way-more-productive"><strong>You’re probably not using this ChatGPT feature — but it can make you way more productive</strong></a></li><li><a href="https://www.tomsguide.com/ai/napster-is-back-and-it-just-launched-a-usd99-holographic-ai-display"><strong>Napster is back — and it just launched a $99 holographic AI display</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon ends Prime free shipping sharing and lower sign-ups are reportedly to blame ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/amazon-ends-prime-free-shipping-sharing-and-lower-sign-ups-are-reportedly-to-blame</link>
                                                                            <description>
                            <![CDATA[ Amazon has ended its Prime Invitee program which allowed subscribers to share their free shipping perk with others. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">DNjMP87vAUtFeBtFT4RhSc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PHNuMXh6G2wz5e3q2KL4Wb-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 03 Sep 2025 17:54:52 +0000</pubDate>                                                                                                                                <updated>Wed, 03 Sep 2025 19:42:09 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ scott.younker@futurenet.com (Scott Younker) ]]></author>                    <dc:creator><![CDATA[ Scott Younker ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/RZsUpqcJ6Uj2q83oCUwNhQ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Scott Younker is the West Coast Reporter at Tom’s Guide. He covers all the latest tech news, including phones, computing and more. He’s been involved in tech since 2011 covering everything from cameras and swimming pool equipment to the latest gaming consoles and smart TVs. He is on a seemingly never ending hunt to build the easiest to use home media system. &lt;/p&gt;&lt;p&gt;Before Tom’s Guide, Scott worked for publications like &lt;em&gt;Digital Trends, Outdoor Photographer, Dead Beats Panel&lt;/em&gt;, and in a brief detour, &lt;em&gt;America’s Funniest Home Videos&lt;/em&gt;. Yes, he has seen more pratfalls, silly pets and ridiculous home movie fails than is reasonably healthy. &lt;/p&gt;&lt;p&gt;When not writing about the latest devices or advances in chipsets, be sure to ask about Scott about disc golf and sustainability, or just if you’re being cheeky, ask about his noodle arm. If you truly want to get nerdy, bring up board games and his ongoing losing streak. &lt;/p&gt;&lt;p&gt;Scott joined Tom&#039;s Guide in 2024 as the West Coast Reporter. He graduated from the School of Journalism at the University of Oregon with a degree in magazine journalism and a minor in communications. While there he blogged or wrote for several magazines including the Fluxx, Ethos and the Oregon Commentator. He briefly wrote and managed a moderately successful blog focused on web comics. &lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/PHNuMXh6G2wz5e3q2KL4Wb-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Amazon Prime]]></media:description>                                                            <media:text><![CDATA[Amazon Prime]]></media:text>
                                <media:title type="plain"><![CDATA[Amazon Prime]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PHNuMXh6G2wz5e3q2KL4Wb-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Amazon is ending its Prime Invitee Program which let Prime members share free shipping benefits with people outside of their homes. The program officially ends on October 1.</p><p>A <a href="https://www.cnbc.com/2025/09/02/amazon-eliminates-prime-share-shipping.html" target="_blank">CNBC report </a>claims that Amazon has begun notifying customers about its plans to end the program. Previously invited "guests" should receive notifications by September 5.</p><p>“We are writing to inform you that the Prime Invitee Program, which allowed sharing Prime’s fast, free delivery with others, will end on October 1, 2025,” the notice reportedly states.</p><p>Up until now, the program let Prime members share free, two-day shipping with another adult in their household, even if they had a different address. Amazon will now prompt the guest users to start their own Amazon Prime accounts at a discounted $14.99 for the first year, and a standard $14.99 a month afterwards. </p><div><blockquote><p>The Invitee program, which enabled sharing of the Prime shipping benefit only, is being phased out.</p><p>Amazon statement</p></blockquote></div><p>We were informed that Amazon stopped accepting new invitees in 2015 — only six years after the program launched in 2009.</p><p>With that the company is encouraging customers to sign up for Amazon Family at no extra cost instead which allows Prime benefits to be shared across multiple people in the same house. However, it's currently limited to two adults and up to four children. </p><p>Teenagers can be included if they were added before April 7, 2025. Benefits include free shipping, Prime Video, Music and more.</p><p>"The Invitee program, which enabled sharing of the Prime shipping benefit only, is being phased out, and Prime members can instead share a broad range of Prime benefits with Amazon Family," an Amazon spokesperson told Tom's Guide in a statement.</p><h2 id="sharing-crackdown">Sharing crackdown</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NduuGQSaD4okS4kXbWoByS" name="netflix-password-sharing-crackdown-notification-2.jpg" alt="A TV with the Netflix error message "This TV isn't part of your Netflix household"" src="https://cdn.mos.cms.futurecdn.net/NduuGQSaD4okS4kXbWoByS.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>It's not clear how Amazon will limit account sharing under the new policy as the company has not provided any specifics. But it's not alone in cracking down on account sharing.</p><p>This year alone, <a href="https://www.tomsguide.com/entertainment/hbo-max/max-cracks-down-on-password-sharing-heres-how-much-extra-members-cost">both HBO Max</a> and <a href="https://www.tomsguide.com/entertainment/streaming/youtube-follows-netflix-and-quietly-rolls-out-account-sharing-restrictions-heres-what-we-know">YouTube Premium </a>introduced measures to eliminate password sharing. It follows similar moves from <a href="https://www.tomsguide.com/entertainment/disney-plus/disney-plus-password-sharing-crackdown-is-here-heres-what-the-paid-sharing-program-costs">Disney Plus</a> late last year as streaming services attempted to follow <a href="https://www.tomsguide.com/opinion/netflixs-password-sharing-crackdown-got-me-heres-what-happened">Netflix's model</a> for reducing account sharing.</p><p>As subscription services sign-ups plateaued in recent years, streamers and others are trying to claw back some revenue by forcing people to sign up for accounts as opposed to just sharing them with others.</p><h2 id="slower-prime-subscriptions-to-blame">Slower Prime subscriptions to blame?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Kgpcz6aok5VuP4ow5oYfTQ" name="Prime Day" alt="Prime Day 2025" src="https://cdn.mos.cms.futurecdn.net/Kgpcz6aok5VuP4ow5oYfTQ.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Amazon)</span></figcaption></figure><p>This crackdown on account sharing comes as <a href="https://www.reuters.com/business/retail-consumer/amazon-us-prime-sign-ups-slow-despite-expanded-prime-day-push-data-shows-2025-09-02/" target="_blank">Reuters reports</a> that Amazon fell short of its goals for Prime sign-ups in the United States. This occurred despite the extended four-day Prime Day event this summer. Signups apparently failed to meet last year's total and the company's own internal targets.</p><p>According to Reuters, the company registered 5.4 million sign-ups in the month leading up to this year's Prime Day. This is about 116,000 less than last year and 106,000 below the company's goals.</p><p>"Prime membership continues to show strong growth and customer engagement in the U.S. and internationally," a spokesperson told Reuters. The company added that it had earned "record-breaking" sign-ups without providing specifics.</p><p>A spokesperson told Tom's Guide that there is no relationship between the ending of the program and the company's recent Prime Day numbers.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/us/what-is-amazon-prime,news-18041.html">What is Amazon Prime? Everything you need to know</a></li><li><a href="https://www.tomsguide.com/sales-events/amazons-labor-day-sale-is-massive-but-these-are-the-only-deals-id-shop">Massive Amazon Labor Day sale — 75+ deals you can still get</a></li><li><a href="https://www.tomsguide.com/best-picks/amazon-prime-best-movies">35 best movies on Amazon Prime Video to stream right now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Massive Apple leak just revealed 10 new products — Apple Watch 11, new Apple TV, new iPad mini and more  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/whoops-apple-just-accidentally-leaked-10-new-products-heres-everything-thats-coming</link>
                                                                            <description>
                            <![CDATA[ Apple's mistake provided us with a glimpse of the company's future plans, and things are looking promising. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4FXWEsc8wmc7jDCh7bwyah</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/T2nsAAmkxgTc8YGE7ftSzB-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 15 Aug 2025 14:57:41 +0000</pubDate>                                                                                                                                <updated>Fri, 15 Aug 2025 16:16:30 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ dave.leclair@futurenet.com (Dave LeClair) ]]></author>                    <dc:creator><![CDATA[ Dave LeClair ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/fyx7qYdxPMTNBhdnMfNmaB.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Senior News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/T2nsAAmkxgTc8YGE7ftSzB-1280-80.jpg">
                                                            <media:credit><![CDATA[Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tim Cook at an Apple event]]></media:description>                                                            <media:text><![CDATA[Tim Cook at an Apple event]]></media:text>
                                <media:title type="plain"><![CDATA[Tim Cook at an Apple event]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/T2nsAAmkxgTc8YGE7ftSzB-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A massive new leak in Apple's own software code has reportedly revealed several unannounced hardware devices. In total, 10 new products were found by <a href="https://www.macrumors.com/2025/08/14/every-apple-secret-that-leaked-yesterday/" target="_blank">MacRumors</a> — that's a lot of Apple news to drop in a single day. This includes a new HomePod mini, a new Apple TV, new iPad, new Vision Pro and three new Apple Watches. </p><p>In fact, that's probably more than Apple will even announce at its <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17-event-rumored-date-and-all-the-new-products-expected-to-launch">iPhone 17 event</a>, which is rapidly approaching. These devices may be available further down the road, so you may need to be patient for some of them. Here are all the devices that have been leaked, along with the information we have about them (for some, the details are very limited).</p><h2 id="new-homepod-mini-with-updated-chip">New HomePod mini with updated chip</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:1960px;"><p class="vanilla-image-block" style="padding-top:42.86%;"><img id="ipxyu4Rf6gSwmiUEW3z5vC" name="HomePod-mini-kitchen_HERO.jpg" alt="Apple HomePod mini" src="https://cdn.mos.cms.futurecdn.net/ipxyu4Rf6gSwmiUEW3z5vC.jpg" mos="" align="middle" fullscreen="" width="1960" height="840" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>We've heard <a href="https://www.tomsguide.com/home/smart-home/new-apple-tv-and-homepod-mini-reportedly-launching-in-2025-with-apple-networking-chip">rumors of a new HomePod mini</a> for some time, and the big Apple leak seemingly confirms that the company is working on one. </p><p>The code leak references a device with a chip that uses T8310 microarchitecture, the same used in Apple Watch devices. While we don't know the exact model — it could be the S9, S10, or S11 based on all of those using the same technology — we can safely assume it'll be an upgraded version of the S5 chip found in the <a href="https://www.tomsguide.com/reviews/apple-homepod-mini">current HomePod mini</a>, which is getting a bit old now.</p><h2 id="new-apple-tv-with-a17-pro-chip">New Apple TV with A17 Pro chip</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="X2oggLgBnxuc5iHqkrTpgZ" name="Apple TV loses netflix access.jpg" alt="Apple TV on counter in living room" src="https://cdn.mos.cms.futurecdn.net/X2oggLgBnxuc5iHqkrTpgZ.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>It's about time for Apple to release an <a href="https://www.tomsguide.com/tvs/new-apple-tv-expected-in-2025-all-the-rumors-so-far">updated Apple TV device</a>, and it appears that it will happen in the relatively near future. Based on the leak's claim that the new device will use an A17 Pro chip, it could represent a significant power boost from the previous generation — the current model features a reasonably powerful <a href="https://www.tomsguide.com/news/a16-bionic-vs-a15-bionic">A15 Bionic chip</a>. </p><p>Unfortunately, that's about all we know about this new Apple TV device. Form factor and other performance elements weren't revealed in this leak, but if the device is coming soon, I'm sure additional news will follow.</p><h2 id="apple-studio-display-2">Apple Studio Display 2</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TJW6XntruxNCDjxnkD2sYg" name="TG_Mac-Studio-Display-LIST.jpg" alt="Mac Studio on a desk plugged into a Studio Display" src="https://cdn.mos.cms.futurecdn.net/TJW6XntruxNCDjxnkD2sYg.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/reviews/apple-studio-display">original Studio Display</a> was released in 2022, so it's time for Apple to introduce a new one. A <a href="https://www.tomsguide.com/computing/apple-reportedly-working-on-two-new-studio-display-monitors-heres-what-i-want-to-see">Studio Display 2</a> with the codename J427 was spotted in this giant leak, indicating that the monitor is likely part of Apple's plans.</p><p>Unfortunately, we have more questions than answers regarding what the monitor will offer, but we're excited to see it next year, as the prevailing <a href="https://www.tomsguide.com/computing/apple-desktops/apples-next-studio-display-tipped-to-arrive-in-2026-and-itll-be-brighter-than-ever">rumors suggest it'll launch in early 2026</a>. </p><h2 id="new-ipad-mini-with-a19-pro-chip">New iPad mini with A19 Pro chip</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:775px;"><p class="vanilla-image-block" style="padding-top:64.52%;"><img id="UZ2wGncH98st5QcJSpnakb" name="ipad mini 5.jpg" alt="iPad Mini 5" src="https://cdn.mos.cms.futurecdn.net/UZ2wGncH98st5QcJSpnakb.jpg" mos="" align="middle" fullscreen="" width="775" height="500" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The <a href="https://www.tomsguide.com/reviews/apple-ipad-mini-6-2021">iPad mini</a> is Apple's most portable tablet option, making it ideal for a specific subset of buyers. It appears that a new one is on the way, and it features the <a href="https://www.tomsguide.com/phones/iphones/apple-a19-pro-chip-rumored-to-be-the-first-in-the-world-to-use-2nm-manufacutring-process">A19 Pro chip</a> that Apple plans to use in the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro">iPhone 17 Pro</a> models. </p><p>That means the small tablet should offer stellar speed and performance compared to its predecessor with the A17 Pro chip. </p><h2 id="new-low-cost-ipad-with-a18-chip">New low-cost iPad with A18 chip</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2yqdyE2pSZWHbng9UkAiQb" name="iPad-Pro-11-2021_LIST.jpg" alt="iPad Pro 2021 (11-inch) review" src="https://cdn.mos.cms.futurecdn.net/2yqdyE2pSZWHbng9UkAiQb.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>The base iPad is one of the best choices for many tablet buyers who don't need the most powerful devices on the market. The 12th-generation entry-level iPad is expected to utilize the A18 chip, according to MacRumors' findings. That would be Apple skipping the A17, as the 11th-generation iPad already features the A16.</p><h2 id="apple-vision-pro-with-m5-chip">Apple Vision Pro with M5 chip </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:42.85%;"><img id="FkEmFKxyK36Upypia9VoSM" name="Vision Pro HERO.jpg" alt="Apple Vision Pro" src="https://cdn.mos.cms.futurecdn.net/FkEmFKxyK36Upypia9VoSM.jpg" mos="" align="middle" fullscreen="" width="2000" height="857" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There have been conflicting reports about whether <a href="https://www.tomsguide.com/computing/vr-ar/report-apple-may-stop-producing-vision-pro-by-next-month">Apple was giving up on the Vision Pro</a> or making a new one. This code leak seemingly confirms the company is, in fact, <a href="https://www.tomsguide.com/computing/vr-ar/apple-vision-pro-2">working on a new model</a> and that it will have the powerful M5 chip. Other rumors have suggested minimal hardware changes and improvements, but a new chip could be enough to incentivize others to hop on the bandwagon.</p><h2 id="apple-watch-11-apple-watch-ultra-3-and-apple-watch-se-3">Apple Watch 11, Apple Watch Ultra 3 and Apple Watch SE 3</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="6EDQW8aCeegUtUxHYj7gBh" name="Apple Watch Ultra 2 LIST.jpg" alt="Apple Watch Ultra 2" src="https://cdn.mos.cms.futurecdn.net/6EDQW8aCeegUtUxHYj7gBh.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><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-biked-12-miles-with-the-apple-watch-10-vs-samsung-galaxy-watch-8-and-theres-a-clear-winner">I biked 12 miles with the Apple Watch 10 vs Samsung Galaxy Watch 8, and there's a clear winner</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-11">Apple Watch 11 — all the biggest rumors so far</a></li><li><a href="https://www.tomsguide.com/phones/iphones/mark-your-calendars-iphone-17-release-date-just-leaked">Mark your calendars — iPhone 17 release date may have just leaked</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I review tech for a living: 9 top-rated gadgets under $50 and on sale at Amazon now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/i-review-tech-for-a-living-9-top-rated-gadgets-under-usd50-and-on-sale-right-now-at-amazon</link>
                                                                            <description>
                            <![CDATA[ I spend all day, every day, testing gadgets and tech. Here are my favorite products on sale for under $50 right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">xmzLoC5NNvjSURQjUSxvEP</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/udwBmC5erccqdJj7ZPgUNB-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 15 Aug 2025 11:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 19 Aug 2025 05:10:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ peter.wolinski@futurenet.com (Peter Wolinski) ]]></author>                    <dc:creator><![CDATA[ Peter Wolinski ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/stgPfXWY7ukw8J8rfC7vjg.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Peter is a Senior Editor at Tom&#039;s Guide, heading up the site&#039;s Reviews team and Cameras section. Having built gaming PCs since he was 10 (that&#039;s a while ago now) he&#039;s a bit of a nerd about components and hardware. He&#039;s also been an iPhone user since the classic iPhone 4, and a Mac user for well over a decade. Experienced in using and testing all kinds of technology — from phones through to tablets, computers, games consoles, cameras and smart home tech — helping people find the best tech for them (at the best prices) is what Peter does best. A photographer since he bought his first camera (a Fujifilm) in 2015, Peter was previously an Editor for Canon-Europe.com. He then edited the Cameras and How To sections of Tom&#039;s Guide. When he&#039;s not crafting helpful, in-depth reviews, Peter can usually be found out and about honing his architectural photography skills, riding his motorcycle around Welsh mountain roads, telling everyone about his two greyhounds, squeezing a few extra FPS out of PC games or perfecting his espresso shots.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/udwBmC5erccqdJj7ZPgUNB-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A split photo showing the EarFun Air Pro 3 on the left and the Amazfit Band 7 on the right.]]></media:description>                                                            <media:text><![CDATA[A split photo showing the EarFun Air Pro 3 on the left and the Amazfit Band 7 on the right.]]></media:text>
                                <media:title type="plain"><![CDATA[A split photo showing the EarFun Air Pro 3 on the left and the Amazfit Band 7 on the right.]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/udwBmC5erccqdJj7ZPgUNB-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As the Tom's Guide reviews editor, my team of expert reviewers and I put tech through its paces to figure out whether it's worth your money. Naturally, a big factor in our analysis is pricing, so I'm always having to check the prices of products and monitor cost changes over time. That means I've permanently got a Chrome tab open for Amazon. </p><p>As I was checking prices for some camera gear, I couldn't help but notice that quite a few of my favorite budget products are on sale. </p><p>For instance, the <a href="https://www.amazon.com/EarFun-Air-Pro-Cancelling-Multipoint/dp/B0BNNMYSGQ" target="_blank" rel="nofollow">EarFun Air Pro 3 are currently on sale for just $47 at Amazon</a>, and these are some of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best wireless earbuds</a> around if you're on a budget. Looking for a new Bluetooth speaker? <a href="https://www.amazon.com/JBL-Ultra-Portable-Waterproof-Dustproof-Built/dp/B0CX5C6WP3" target="_blank" rel="nofollow">The JBL Go 4 is now only $43 at Amazon</a> — I reviewed this speaker personally and loved it! And if you're a gamer, check out one of our favorite budget gaming keyboards, the <a href="https://www.amazon.com/LEMOKEY-Mechanical-Programmable-North-facing-Compatible/dp/B0CTJR6KJ8" target="_blank" rel="nofollow">Lemokey X1, which is just $22 at Amazon</a>. </p><p>And there's more where that came from. To help you guys save money, I rounded up my favorite sub-$50 deals here. And don't miss out on these <a href="https://www.tomsguide.com/coupons/amazon.com">Amazon promo codes. </a></p><h2 class="article-body__section" id="section-quick-list"><span>Quick list</span></h2><ul><li><strong>Redragon M916 8K wireless gaming mouse: </strong><a href="https://www.amazon.com/dp/B0D2WT11JD" target="_blank" rel="nofollow"><strong>was $39 now $18 w/ Prime</strong></a><strong></strong></li><li><strong>Lemokey X1 gaming keyboard: </strong><a href="https://www.amazon.com/LEMOKEY-Mechanical-Programmable-North-facing-Compatible/dp/B0CTJR6KJ8" target="_blank" rel="nofollow"><strong>was $36 now $22 at Amazon</strong></a><strong></strong></li><li><strong>Anker Nano II multi-charger: </strong><a href="https://www.amazon.com/Anker-Charger-Compact-Foldable-MacBook/dp/B09C5RG6KV" target="_blank" rel="nofollow"><strong>was $39 now $25 at Amazon</strong></a><strong></strong></li><li><strong>Gamakay TK75 mechanical keyboard: </strong><a href="https://www.amazon.com/GK-GAMAKAY-TK75-Bluetooth-Mechanical/dp/B0BRPVB42T" target="_blank" rel="nofollow"><strong>was $49 now $34 at Amazon</strong></a></li><li><strong>Amazfit Band 7 fitness tracker: </strong><a href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G" target="_blank" rel="nofollow"><strong>was $47 now $37 at Amazon</strong></a><strong></strong></li><li><strong>JBL Go 4 Bluetooth speaker: </strong><a href="https://www.amazon.com/JBL-Ultra-Portable-Waterproof-Dustproof-Built/dp/B0CX5C6WP3" target="_blank" rel="nofollow"><strong>was $49 now $43 at Amazon</strong></a><strong></strong></li><li><strong>GameSir G7 SE gaming controller: </strong><a href="https://www.amazon.com/GameSir-Controller-Xbox-One-Windows-Joysticks/dp/B0D8KXMCTC" target="_blank" rel="nofollow"><strong>was $49 now $44 at Amazon</strong></a><strong></strong></li><li><strong>EarFun Air Pro 3 wireless earbuds:</strong><a href="https://www.amazon.com/EarFun-Air-Pro-Cancelling-Multipoint/dp/B0BNNMYSGQ" target="_blank" rel="nofollow"><strong> was $65 now $47 at Amazon</strong></a><strong></strong></li><li><strong>Cosori Mini Air Fryer: </strong><a href="https://www.amazon.com/COSORI-2-1-Quart-Leftover-Nonstick-Dishwasher-Safe/dp/B0BDFRZX3F" target="_blank" rel="nofollow"><strong>was $59 now $49 at Amazon</strong></a><strong></strong></li></ul><h2 class="article-body__section" id="section-editor-approved-deals-under-50"><span>Editor-approved deals under $50</span></h2><div class="product"><a data-dimension112="e2da712c-775e-4314-ae2c-e7de664c95a8" data-action="Deal Block" data-label="EarFun Air Pro 3" data-dimension48="EarFun Air Pro 3" data-dimension25="$47" href="https://www.amazon.com/EarFun-Air-Pro-Cancelling-Multipoint/dp/B0BNNMYSGQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1228px;"><p class="vanilla-image-block" style="padding-top:99.59%;"><img id="Cgp37AGa6qGPskXkFNeykH" name="Earfun-Air-Pro-3-deal.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/Cgp37AGa6qGPskXkFNeykH.jpg" mos="" align="middle" fullscreen="" width="1228" height="1223" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>My team reviewed the <a href="https://www.tomsguide.com/audio/earbuds/earfun-air-pro-3-review" data-dimension112="e2da712c-775e-4314-ae2c-e7de664c95a8" data-action="Deal Block" data-label="EarFun Air Pro 3" data-dimension48="EarFun Air Pro 3" data-dimension25="$47">EarFun Air Pro 3</a> last year, when we awarded a 4-star rating to these budget earbuds. The sound quality is strong for the money, while the ANC and battery life are excellent. I own the <a href="https://www.tomsguide.com/audio-headphones/earbuds/earfun-air-pro-4-review">EarFun Air Pro 4</a>s (also on sale for <a href="https://www.amazon.com/EarFun-Canceling-Snapdragon-Bluetooth-Detection/dp/B0D5M9SH1X" target="_blank" rel="nofollow">$67 at Amazon</a>) and I would recommend these instead if you can stretch the extra $20, as they're phenomenal and won 4.5 stars from us. You won't regret the Air Pro 3s, though, as they're still brilliant buds.<a class="view-deal button" href="https://www.amazon.com/EarFun-Air-Pro-Cancelling-Multipoint/dp/B0BNNMYSGQ" target="_blank" rel="nofollow" data-dimension112="e2da712c-775e-4314-ae2c-e7de664c95a8" data-action="Deal Block" data-label="EarFun Air Pro 3" data-dimension48="EarFun Air Pro 3" data-dimension25="$47">View Deal</a></p></div><div class="product"><a data-dimension112="3e04365f-5a9b-4421-a7a1-39fdec892b81" data-action="Deal Block" data-label="Redragon M916 review" data-dimension48="Redragon M916 review" data-dimension25="$18" href="https://www.amazon.com/dp/B0D2WT11JD" 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="saRYf79vb62jyn7N7TWCd9" name="Redragon M916.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/saRYf79vb62jyn7N7TWCd9.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>"Proof that gaming performance can come cheap" is how we described this mouse in our 4-star <a href="https://www.tomsguide.com/computing/peripherals/redragon-m916-pro-review" data-dimension112="3e04365f-5a9b-4421-a7a1-39fdec892b81" data-action="Deal Block" data-label="Redragon M916 review" data-dimension48="Redragon M916 review" data-dimension25="$18">Redragon M916 review</a>. This brilliant little gaming mouse is extremely light and offers excellent gaming features for the money, including adjustable DPI up to 8K. <em>This deal is for Prime Members only.</em><a class="view-deal button" href="https://www.amazon.com/dp/B0D2WT11JD" target="_blank" rel="nofollow" data-dimension112="3e04365f-5a9b-4421-a7a1-39fdec892b81" data-action="Deal Block" data-label="Redragon M916 review" data-dimension48="Redragon M916 review" data-dimension25="$18">View Deal</a></p></div><div class="product"><a data-dimension112="fc69ced6-fbb7-435f-a069-e0bc95bddb70" data-action="Deal Block" data-label="JBL Go 4" data-dimension48="JBL Go 4" data-dimension25="$43" href="https://www.amazon.com/JBL-Ultra-Portable-Waterproof-Dustproof-Built/dp/B0CX5C6WP3" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:466px;"><p class="vanilla-image-block" style="padding-top:106.22%;"><img id="FYpKvYvcYxzYCKVsg4CtRQ" name="JBL Go 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYpKvYvcYxzYCKVsg4CtRQ.jpg" mos="" align="middle" fullscreen="" width="466" height="495" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I tested the <a href="https://www.tomsguide.com/audio/bluetooth-speakers/jbl-go-4-review" data-dimension112="fc69ced6-fbb7-435f-a069-e0bc95bddb70" data-action="Deal Block" data-label="JBL Go 4" data-dimension48="JBL Go 4" data-dimension25="$43">JBL Go 4</a> personally last year and was impressed by how well this speaker performed given its size, awarding a 4-star score. It offers decent sound quality, high levels of waterproofing, multi-point connectivity and is super portable. It's ideal for slipping into your bag to soundtrack spontaneous gatherings or for playing music while you study.<a class="view-deal button" href="https://www.amazon.com/JBL-Ultra-Portable-Waterproof-Dustproof-Built/dp/B0CX5C6WP3" target="_blank" rel="nofollow" data-dimension112="fc69ced6-fbb7-435f-a069-e0bc95bddb70" data-action="Deal Block" data-label="JBL Go 4" data-dimension48="JBL Go 4" data-dimension25="$43">View Deal</a></p></div><div class="product"><a data-dimension112="5814e0f5-a2a6-4ff1-8fb0-a650ca9d4907" data-action="Deal Block" data-label="GameSir G7 SE review" data-dimension48="GameSir G7 SE review" data-dimension25="$44" href="https://www.amazon.com/GameSir-Controller-Xbox-One-Windows-Joysticks/dp/B0D8KXMCTC" 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="h2vVtfz6VYN2AM5KDKhR5B" name="GameSir G7 SE.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/h2vVtfz6VYN2AM5KDKhR5B.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I won't lie, this one took us a little by surprise in our <a href="https://www.tomsguide.com/gaming/gaming-peripherals/gamesir-g7-se-review" data-dimension112="5814e0f5-a2a6-4ff1-8fb0-a650ca9d4907" data-action="Deal Block" data-label="GameSir G7 SE review" data-dimension48="GameSir G7 SE review" data-dimension25="$44">GameSir G7 SE review</a>. We awarded this controller 4.5 stars and our Editor's Choice award. It's a fantastic pad for the money, with hall effect triggers <em><strong>and</strong></em> sticks (so no stick drift); excellent companion software and customization options; and a lightweight but sturdy build. "Better than an official gamepad" was our conclusion.<a class="view-deal button" href="https://www.amazon.com/GameSir-Controller-Xbox-One-Windows-Joysticks/dp/B0D8KXMCTC" target="_blank" rel="nofollow" data-dimension112="5814e0f5-a2a6-4ff1-8fb0-a650ca9d4907" data-action="Deal Block" data-label="GameSir G7 SE review" data-dimension48="GameSir G7 SE review" data-dimension25="$44">View Deal</a></p></div><div class="product"><a data-dimension112="ff63c8e5-7be4-48e7-96fc-ba6d5ac7e027" data-action="Deal Block" data-label="100W version, which is pricer (although currently $10 off)" data-dimension48="100W version, which is pricer (although currently $10 off)" data-dimension25="$25" href="https://www.amazon.com/Anker-Charger-Compact-Foldable-MacBook/dp/B09C5RG6KV" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:947px;"><p class="vanilla-image-block" style="padding-top:145.93%;"><img id="GfMyzCMwDRKggFZJ2WTecn" name="Anker Nano II" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/GfMyzCMwDRKggFZJ2WTecn.jpg" mos="" align="middle" fullscreen="" width="947" height="1382" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Alright, full disclosure, my team hasn't reviewed this. However, I own one of these chargers and honestly, I don't go anywhere without it. It's so useful having three charging points, so I can charge all my devices simultaneously from one power outlet when on the go. This version is 65W: so good for phones, gadgets, tablets and small laptops like a Chromebook or MacBook Air. I own the <a href="https://www.amazon.com/Anker-Charger-Foldable-Compact-MacBook/dp/B0CZ6LXL8R" target="_blank" rel="nofollow" data-dimension112="ff63c8e5-7be4-48e7-96fc-ba6d5ac7e027" data-action="Deal Block" data-label="100W version, which is pricer (although currently $10 off)" data-dimension48="100W version, which is pricer (although currently $10 off)" data-dimension25="$25">100W version, which is pricer (although currently $10 off)</a>, but it can charge my full-size MacBook Pro.<a class="view-deal button" href="https://www.amazon.com/Anker-Charger-Compact-Foldable-MacBook/dp/B09C5RG6KV" target="_blank" rel="nofollow" data-dimension112="ff63c8e5-7be4-48e7-96fc-ba6d5ac7e027" data-action="Deal Block" data-label="100W version, which is pricer (although currently $10 off)" data-dimension48="100W version, which is pricer (although currently $10 off)" data-dimension25="$25">View Deal</a></p></div><div class="product"><a data-dimension112="d6c8718e-7a90-44c6-981d-97016d79b230" data-action="Deal Block" data-label="Gamakay TK75" data-dimension48="Gamakay TK75" data-dimension25="$34" href="https://www.amazon.com/GK-GAMAKAY-TK75-Bluetooth-Mechanical/dp/B0BRPVB42T" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1472px;"><p class="vanilla-image-block" style="padding-top:42.05%;"><img id="AVy2SNtgbcbqN52sDdisec" name="Gamakay TK75" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/AVy2SNtgbcbqN52sDdisec.jpg" mos="" align="middle" fullscreen="" width="1472" height="619" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>We're big fans of the <a href="https://www.tomsguide.com/computing/peripherals/Gamakay-tk75-pro-review" data-dimension112="d6c8718e-7a90-44c6-981d-97016d79b230" data-action="Deal Block" data-label="Gamakay TK75" data-dimension48="Gamakay TK75" data-dimension25="$34">Gamakay TK75</a>, awarding 4 stars to the Pro model after our testing. This model is slightly cheaper, using Gateron switches rather than Gamakay's own brilliant switches. Absolutely nothing wrong with a Gateron switch, though, especially for $34. And besides, this deck is hot swappable, so you can change switches anyway! This board is perfect for typing and productivity — ideal for anyone heading back to school.<a class="view-deal button" href="https://www.amazon.com/GK-GAMAKAY-TK75-Bluetooth-Mechanical/dp/B0BRPVB42T" target="_blank" rel="nofollow" data-dimension112="d6c8718e-7a90-44c6-981d-97016d79b230" data-action="Deal Block" data-label="Gamakay TK75" data-dimension48="Gamakay TK75" data-dimension25="$34">View Deal</a></p></div><div class="product"><a data-dimension112="9254eff9-8550-4b55-845d-3753a49e404f" data-action="Deal Block" data-label="Lemokey X1" data-dimension48="Lemokey X1" data-dimension25="$22" href="https://www.amazon.com/LEMOKEY-Mechanical-Programmable-North-facing-Compatible/dp/B0CTJR6KJ8" 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="ASvVeo2dtAN2sByAigcZn9" name="LEMOKEY X1.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ASvVeo2dtAN2sByAigcZn9.jpg" mos="" align="middle" fullscreen="" width="1500" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Another keyboard, and one of my team's favorite gaming decks. The <a href="https://www.tomsguide.com/computing/peripherals/lemokey-x1-review" data-dimension112="9254eff9-8550-4b55-845d-3753a49e404f" data-action="Deal Block" data-label="Lemokey X1" data-dimension48="Lemokey X1" data-dimension25="$22">Lemokey X1</a> is a budget gaming keyboard from Lemokey — that's Keychron's gaming-focused sub-brand. This budget board offers great gaming performance, is good to type on and is built very well given its minimal price tag. Gamers on a budget, look no further.<a class="view-deal button" href="https://www.amazon.com/LEMOKEY-Mechanical-Programmable-North-facing-Compatible/dp/B0CTJR6KJ8" target="_blank" rel="nofollow" data-dimension112="9254eff9-8550-4b55-845d-3753a49e404f" data-action="Deal Block" data-label="Lemokey X1" data-dimension48="Lemokey X1" data-dimension25="$22">View Deal</a></p></div><div class="product"><a data-dimension112="6950dae0-cce0-4dba-a54b-f2e7436478e8" data-action="Deal Block" data-label="Cosori Dual Basket" data-dimension48="Cosori Dual Basket" data-dimension25="$49" href="https://www.amazon.com/COSORI-2-1-Quart-Leftover-Nonstick-Dishwasher-Safe/dp/B0BDFRZX3F" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1094px;"><p class="vanilla-image-block" style="padding-top:137.11%;"><img id="3JMgDT9ngujroatmcVG9KU" name="Cosori.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3JMgDT9ngujroatmcVG9KU.jpg" mos="" align="middle" fullscreen="" width="1094" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Where would we be without our air fryers? I use mine day in, day out. We tested this Corsori Mini Air Fryer's bigger sibling, the <a href="https://www.tomsguide.com/home/air-fryers/cosori-dual-basket-air-fryer-review" data-dimension112="6950dae0-cce0-4dba-a54b-f2e7436478e8" data-action="Deal Block" data-label="Cosori Dual Basket" data-dimension48="Cosori Dual Basket" data-dimension25="$49">Cosori Dual Basket</a>, awarding 4 stars. This smaller version is great if you need to save space, maybe in a dorm or small/shared kitchen!<a class="view-deal button" href="https://www.amazon.com/COSORI-2-1-Quart-Leftover-Nonstick-Dishwasher-Safe/dp/B0BDFRZX3F" target="_blank" rel="nofollow" data-dimension112="6950dae0-cce0-4dba-a54b-f2e7436478e8" data-action="Deal Block" data-label="Cosori Dual Basket" data-dimension48="Cosori Dual Basket" data-dimension25="$49">View Deal</a></p></div><div class="product"><a data-dimension112="2d15e143-22fa-4c38-aa32-b55a70162bea" data-action="Deal Block" data-label="Amazfit Band 7" data-dimension48="Amazfit Band 7" data-dimension25="$37" href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:126.36%;"><img id="FvVeEggCMcJRToQwRTkfca" name="Amazfit Band 7 Fitness & Activity Tracker" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FvVeEggCMcJRToQwRTkfca.jpg" mos="" align="middle" fullscreen="" width="679" height="858" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>We bestowed upon the <a href="https://www.tomsguide.com/wellness/fitness-trackers/amazfit-band-7-review" data-dimension112="2d15e143-22fa-4c38-aa32-b55a70162bea" data-action="Deal Block" data-label="Amazfit Band 7" data-dimension48="Amazfit Band 7" data-dimension25="$37">Amazfit Band 7</a> our 4.5-star Editor's Choice award when we tested it last year. We asked: "why spend $150 when the Amazfit Band 7 is right here?" A lovely display with great battery life; tons of fitness, health and sleep tracking features; plus a minimal, lightweight design... all for $37. What's not to love?<a class="view-deal button" href="https://www.amazon.com/Amazfit-Fitness-Tracker-Monitoring-Resistant/dp/B0C2717Y6G" target="_blank" rel="nofollow" data-dimension112="2d15e143-22fa-4c38-aa32-b55a70162bea" data-action="Deal Block" data-label="Amazfit Band 7" data-dimension48="Amazfit Band 7" data-dimension25="$37">View Deal</a></p></div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The future of wearable wellness tech: 5 wild predictions for 2035 according to experts and industry leaders ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/the-future-of-wearable-wellness-tech-5-wild-predictions-for-2035-according-to-experts-and-industry-leaders</link>
                                                                            <description>
                            <![CDATA[ Smartwatch batteries that never need a recharge, steering wheels that sense when you're stressed, and contact lenses that help you remember acquaintances' names — the not-too-distant future of wearable and embeddable technology is fascinating. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">HpaNQJePNMuWgn5G8PBN8N</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kbpGMHhRHaGX3pSx2cnPW4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 11 Aug 2025 12:00:00 +0000</pubDate>                                                                                                                                <updated>Mon, 11 Aug 2025 15:35:40 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ dan.bracaglia@futurenet.com (Dan Bracaglia) ]]></author>                    <dc:creator><![CDATA[ Dan Bracaglia ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3Ev8EFrheNxPemMWSBaKcK.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;&lt;br&gt;&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/kbpGMHhRHaGX3pSx2cnPW4-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The World in 2035: Wearables]]></media:description>                                                            <media:text><![CDATA[The World in 2035: Wearables]]></media:text>
                                <media:title type="plain"><![CDATA[The World in 2035: Wearables]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kbpGMHhRHaGX3pSx2cnPW4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title">Explore The World in 2035</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="HAX5Jbb7yNHduz7GyBCGFb" name="World-in-2035-Boxout-Curve" caption="" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/HAX5Jbb7yNHduz7GyBCGFb.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: Tom's Guide)</span></figcaption></figure><p class="fancy-box__body-text"><strong></strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/ai/from-hyper-personal-assistants-to-mind-reading-tech-this-is-how-ai-will-transform-everything-by-2035" target="_blank"><strong>AI</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/computing/smart-glasses/smart-glasses-revolution-inside-the-biggest-tech-trend-of-the-next-10-years" target="_blank"><strong>Smart Glasses</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/tech/the-future-of-wearable-wellness-tech-5-wild-predictions-for-2035-according-to-experts-and-industry-leaders" target="_blank"><strong>Wearable Tech</strong></a><strong></strong><br><strong></strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/phones/what-will-our-phones-be-like-in-2035" target="_blank"><strong>Smartphones</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/phones/iphones/meet-the-iphone-of-2035-its-the-mainframe-on-your-body" target="_blank"><strong>iPhones</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/home/smart-home/heres-what-your-home-robot-will-actually-be-like-by-2035" target="_blank"><strong>Robots</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/vehicle-tech/evs/flying-cars-heres-what-our-vehicles-will-do-by-2035" target="_blank"><strong>Cars</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/tvs/your-tv-in-2035-will-be-wildly-different-and-its-not-what-you-think" target="_blank"><strong>TVs</strong></a></p></div></div><p>In 2035, your Apple Watch Series 36 could arrive with enough battery power to last the lifetime of the wearable; I’m talking years rather than days, i.e., no recharging required.</p><p>Don’t like wearing a watch? All those holistic sensors may come in an assortment of new forms, including flexible and near-invisible stick-on ‘smart patches’ that look kind of like a Band-Aid but stay put for weeks or even months.</p><p>As the speed in which health data can be processed and analysed continues to improve, while physical holistic sensors get tinier and tinier, keeping tabs on your vitals ten years from now will likely not be handled by one piece of dedicated wearable tech, but by an array of health-sensing devices you don’t even have to think about, like the steering wheel of your car if you commute by automobile, your contact lenses (even if you don’t require corrective vision), or even the waistband of your favorite underpants.</p><p>With so much information to decipher, AI will be the backbone that powers future wearable wellness technology. The promise of early detection of not just chronic disease but everyday illness will be another crucial selling point of tomorrow’s wearable devices, and the best devices will offer sensible, actionable steps to follow if something <em>does</em> come up.</p><p>To get a clearer picture of our possible wearable/embeddable future, I spoke with an array of experts and industry leaders in the field, including, Angela McIntyre, the director of the Stanford’s <a href="https://wearable.su.domains/" target="_blank">Wearable Electronics Initiative</a>; Amaury Kosman, the founder and CEO of the smart ring brand, <a href="https://www.tomsguide.com/wellness/fitness-trackers/i-just-went-hands-on-with-the-new-circular-ring-2-and-its-the-most-impressive-smart-ring-at-ces-2025">Circular</a>; Jason Russell, the vice president of software at <a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review">Oura Ring</a>; Antoine Joussain, a lead product manager at the consumer health technology brand, <a href="https://www.withings.com/us/en/" target="_blank">Withings</a>; Roman Axelrod and Dr Valentyn Volkov, cofounders of the smart contact lens startup <a href="https://www.xpanceo.com/">Xpanceo</a>; and Michael Hayes, the CEO of the smart contact startup <a href="https://inwithcorp.com/" target="_blank">InWith Corp</a>.</p><p>These conversations resulted in five major trends surrounding wearables and embeddables for the year 2035: More form factors, batteries that last the life of the device, predictive monitoring for both chronic diseases and everyday conditions, AI connecting the dots between wellness metrics and healthcare, and further incorporation of smart features that make life easier/less stressful. </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:3800px;"><p class="vanilla-image-block" style="padding-top:1.50%;"><img id="tbPV7PssS9CM7F6eRoMcB3" name="World-in-2035-horiz-line" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/tbPV7PssS9CM7F6eRoMcB3.png" mos="" align="middle" fullscreen="" width="3800" height="57" attribution="" endorsement="" class=""></p></div></div></figure><h2 id="the-end-of-rechargeable-batteries">The end of rechargeable batteries</h2><p>Battery life, or lack thereof, is one of the biggest factors holding back today’s wearables. Relatively reliable subscription-free wearables can be picked up for $100 or less (see the <a href="https://www.tomsguide.com/wellness/smartwatches/i-just-tested-the-amazfit-active-2-7-things-you-should-know-about-my-favorite-smartwatch-under-usd100">Amazfit Active 2</a>), but few last longer than a week on a single charge. Fortunately, in 2035, the need to plug in may be as antiquated as the away message.</p><p>“Our goal is for [the battery] to last the lifetime of the device,” says Antoine Joussain, a lead product manager at the French wellness tech brand, Withings. “So if a device is lasting for five years, we’d like [the battery] to last for five years too.”</p><p>This will come through both innovations in battery technology and reductions in power consumption.</p><p>Nearly everyone I spoke to for this article mentioned flexible or even stretchable batteries. Such technology would be crucial for developing a truly band-aid-style "smart patch," notes Angela McIntyre, the Executive Director of Stanford University’s Wearable Electronics Initiative (eWEAR). More on that below.</p><p>Some wearables brands like the smart ring manufacturer, Circular, already use bendable batteries in their product design. However, at the rate at which battery technology is currently developing, the batteries of 2035 will likely look vastly different than today’s.</p><p>“We already have flexible batteries in our rings, and we're trying to max them out. Over the past six years, I've seen three different technologies used in batteries, so different materials that can withstand more and more capacity,” says Amaury Kosman, the Founder and CEO of Circular.</p><div><blockquote><p>“By 2035, it’s plausible that wearables could integrate hybrid energy systems that passively recharge throughout the day, vastly extending runtime and reducing dependency on charging cycles.”</p><p>— Jason Russell, VP of Consumer Software, Oura</p></blockquote></div><p>Power management improvements won’t only come in the form of better batteries. “More efficient signal paths and the ability to disable unused sensors will also contribute meaningfully [to improved battery life]” says Jason Russell, Oura’s VP of consumer software, when asked what a theoretical Oura Ring 10 might look like.</p><p>Another hot topic: energy harvesting. While ten years is likely too soon for our smartwatches to be powered solely by body heat, McIntyre reports that researchers at Stanford and elsewhere are hard at work making the concept a reality. </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:2001px;"><p class="vanilla-image-block" style="padding-top:56.22%;"><img id="CJb2nqtAqiKCeMhQmoh223" name="wearables_LIST1" alt="The World in 2035: Wearables" src="https://cdn.mos.cms.futurecdn.net/CJb2nqtAqiKCeMhQmoh223.jpg" mos="" align="middle" fullscreen="" width="2001" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>“Motion of a person could be harvested as well,” says McIntyre.</p><p>Of course, self-charging wearables <em>do</em> exist in 2025. The <a href="https://www.tomsguide.com/Garmin-Instinct-3-review">Garmin Instinct 3 Solar</a>, which features a light-sensative cell behind the device’s screen, is a great example. However, by 2035, solar charging capabilities might be small enough to fit directly into a contact lens.</p><p>“We are developing light-harvesting features integrated into the lens surface, allowing ambient sunlight or indoor lighting to contribute to the power supply. While energy harvested this way is modest, the low power demands of contact lenses make even small boosts valuable," says Dr Valentyn Volkov, the cofounder of Xpanceo.</p><p>While the founder of the Circular Ring, Amaury Kosman, seemed skeptical of wearables' self-generating energy by 2035, Oura’s VP of Consumer Software, Jason Russell, sounds more optimistic.</p><p>“By 2035, it’s plausible that wearables could integrate hybrid energy systems that passively recharge throughout the day, vastly extending runtime and reducing dependency on charging cycles,” says Russell.</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:3800px;"><p class="vanilla-image-block" style="padding-top:1.50%;"><img id="tbPV7PssS9CM7F6eRoMcB3" name="World-in-2035-horiz-line" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/tbPV7PssS9CM7F6eRoMcB3.png" mos="" align="middle" fullscreen="" width="3800" height="57" attribution="" endorsement="" class=""></p></div></div></figure><h2 id="health-monitoring-sensors-everywhere">Health monitoring sensors … everywhere</h2><p>Don’t expect watches or rings to disappear anytime soon, because whether smart or not, this style of jewelry is likely here to stay. On the flip side, <em>do</em> expect the sensors you already see in smart rings and smartwatches to eventually appear in other wearable products, like earbuds, bracelets, stick-on patches, contact lenses and smart clothing.</p><p>“The idea is to make it disappear,” says Joussain when asked what the future of health-sensing technology looks like for Withings. That’s a pretty bold statement for a brand that makes a somewhat <a href="https://www.tomsguide.com/news/withings-scanwatch-2-unveiled-and-it-can-last-30-days-on-a-charge">chunky metal smartwatch</a> with considerable heft in 2025.</p><p>Ultimately, ten years from now, holistic sensors will be small enough to be installed just about anywhere, not just in wearables but also your computer mouse and even your car’s steering wheel. Essentially, wherever you’re most likely to interact with them.</p><div class="looped-video"><video class="lazyload-in-view lazyloading" data-src="https://cdn.mos.cms.futurecdn.net/yugkFuy5oosyTdGWfYV748/Adobe%20Express%20-%20shutterstock_1090838319%20(1).mp4" autoplay loop muted playsinline src="https://cdn.mos.cms.futurecdn.net/yugkFuy5oosyTdGWfYV748/Adobe%20Express%20-%20shutterstock_1090838319%20(1).mp4"></video></div><p>“All these new [health tracking] technologies will be implemented in everyday objects. So, you take your car every day, when you are holding the steering wheel, it will monitor your vitals,” predicts Joussain.</p><p>Ultimately, Joussain suspects that health sensors will be embedded directly into the user's body. However, he confesses that the concept is almost certainly more than a decade off. Stanford’s McIntyre agrees. Instead, she thinks stick-on smart patches packed with holistic sensors are more likely to make an impact in the next ten years.</p><p>“There are new sensors that are coming, and with your flexible, stretchable capabilities, they'll be even more that we can do from a sticky patch,” says McIntyre.</p><div><blockquote><p>“All these new [health tracking] technologies will be implemented in everyday objects. So, you take your car every day, when you are holding the steering wheel, it will monitor your vitals”</p><p>— Antoine Joussain, lead product manager, Withings</p></blockquote></div><p>Much to my surprise, Circular’s founder, Amaury Kosman, also thinks that smart patches could be the way of the future when it comes to at-home health monitoring.</p><p>“A patch, which is tiny and anybody can wear, I think that's the future of where we're heading. As time goes by, everything gets miniaturized, everything gets more precise, and it gets cheaper. So it's just a logical next step for me,” says Kosman when asked what future wearables will most likely look like.</p><p>Similarly, Oura's Jason Russell acknowledges that the future of wellness monitoring might go beyond the singular smart ring. "We foresee stretching the boundaries of biometric sensing via the ring while integrating complementary wearables that together enable an even more complete picture of your health," Russell says.</p><p>Outside of smart patches, what other new wearable health-monitoring tech can we expect to take off in the next decade? </p><p>“Smart contact lenses, being in direct contact with the eye's surface and tear film, function as a tiny biochemical laboratory on the eye. This close proximity enables continuous, noninvasive monitoring of a variety of health metrics,” says Dr. Volkov.</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:3800px;"><p class="vanilla-image-block" style="padding-top:1.50%;"><img id="tbPV7PssS9CM7F6eRoMcB3" name="World-in-2035-horiz-line" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/tbPV7PssS9CM7F6eRoMcB3.png" mos="" align="middle" fullscreen="" width="3800" height="57" attribution="" endorsement="" class=""></p></div></div></figure><h2 id="early-detection-and-treatment-for-chronic-diseases-and-everyday-ailments">Early detection and treatment for chronic diseases and everyday ailments</h2><p>The <a href="https://www.tomsguide.com/us/best-smartwatches,review-2156.html">best smartwatches</a> already alert users to potential signs of chronic health issues. Popular models like the <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-10-review">Apple Watch 10</a> and <a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-8-review">Samsung Galaxy Watch 8</a> monitor for signs of sleep apnea and heart abnormalities, like AFib. The <a href="https://www.tomsguide.com/wellness/smartwatches/google-pixel-watch-3-review">Google Pixel Watch 3</a> can even trigger an alert and send for help if a <a href="https://www.tomsguide.com/wellness/smartwatches/googles-new-life-saving-tool-just-launched-in-the-u-s-heres-how-to-use-it-on-your-pixel-watch">loss of pulse is detected</a>. </p><p>However, these tools are just scratching the surface. In ten years, your smart wearable may be able to screen for a whole range of chronic conditions, like diabetes, cancer or heart disease. These devices may also be able to give you a 72-hour heads-up to an upcoming cold, or alert you to heightened biomarkers that could indicate elevated stress, with actionable advice to return to your baseline.</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:3840px;"><p class="vanilla-image-block" style="padding-top:55.68%;"><img id="5P4zGSCq4fySoSt6fdpdGk" name="shutterstock_2566860029" alt="World in 2035: Wearable health tech" src="https://cdn.mos.cms.futurecdn.net/5P4zGSCq4fySoSt6fdpdGk.jpg" mos="" align="middle" fullscreen="" width="3840" height="2138" 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>“As sensors become more advanced and miniaturized, the depth and granularity of data will also increase significantly. But the biggest shift will be in how insights are delivered: instead of just showing you the data, future insights could anticipate changes in your health, offer personalized, real-time guidance, and adapt to your unique physiology and goals—making the experience more predictive, proactive, and deeply personalized than ever before,” says Oura’s Jason Russell.</p><p>Ultimately, the future of disease detection may rely less on developing new sensor technology and more on making the most of the data already coming off the sensors we currently have. Enter, the promise of AI.</p><p>“AI is getting a lot better, being able to discern what's a ‘real’ signal out of very noisy data, and then being able to make insights that are more valid for us from that data,” says McIntyre.</p><p>The use of artificial intelligence to analyze health data, effectively replacing manually written code, will exponentially increase the ability for software to sniff out health trends and make personalized recommendations, notes McIntyre.</p><div><blockquote><p>“As sensors become more advanced and miniaturized, the depth and granularity of data will also increase significantly. But the biggest shift will be in how insights are delivered: instead of just showing you the data, future insights could anticipate changes in your health, offer personalized, real-time guidance, and adapt to your unique physiology and goals—making the experience more predictive, proactive, and deeply personalized than ever before.”</p><p>— Jason Russell, VP of Consumer Software, Oura</p></blockquote></div><p>Tomorrow’s wearables might even analyse your blood, urine, or sweat, as all three contain a multitude of easily trackable biomarkers that could indicate whether you’re dehydrated, stressed, or a whole host of other conditions. Monitoring stress, in particular, is a focus of researchers.</p><p>“Cortisol is another ingredient that people are trying to sense with sensors on wearables.  I should say that people have cortisol and sometimes feel very pumped and excited, and other people might have a lot of cortisol and feel very afraid. So it really depends on circumstances and on the individual what putting out cortisol means, ” says McIntyre.</p><p>Future wearables may additionally be able to take the guesswork out of taking medication, says Michael Hayes, the CEO of the smart contact startup InWith. </p><p>“There's a plethora of health applications with smart contacts. From early warning of disease to therapeutic delivery of drugs to the eyes to prevent certain conditions, to bringing new focus capabilities. The tear fluid is a rich medium for biomarkers,” says Hayes. yes.</p><p>Smart contact lenses could even one day replace today’s blood-based health monitoring methods.</p><p>“Glucose levels in tears can be tracked to assist people with diabetes in managing their condition without the need for finger-prick blood tests. Similarly, fluctuations in hormone or vitamin concentrations in the tear film can offer valuable insights into a person’s metabolic or nutritional status,” says Dr. Volkov. </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:3800px;"><p class="vanilla-image-block" style="padding-top:1.50%;"><img id="tbPV7PssS9CM7F6eRoMcB3" name="World-in-2035-horiz-line" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/tbPV7PssS9CM7F6eRoMcB3.png" mos="" align="middle" fullscreen="" width="3800" height="57" attribution="" endorsement="" class=""></p></div></div></figure><h2 id="wearables-that-talk-to-your-doctor-with-some-help-from-ai">Wearables that talk to your doctor (with some help from AI)</h2><p>The concept of a faceless, nameless artificial intelligence interface spitting out wellness advice based on the augmentation of my sleep, workout, dietary, etc., data is beyond unsettling to me. However, everyone I spoke to on the subject assured me that the aggressive AI analysis of my holistic metrics is <em>actually</em> a positive thing.</p><p>Doctors are busy. Wearable data is useful, but in 2025, there’s no conduit to make that data easily accessible to the medical field. And even if there was, the amount of data would likely be entirely overwhelming.</p><div class="looped-video"><video class="lazyload-in-view lazyloading" data-src="https://cdn.mos.cms.futurecdn.net/DJ3Z8XMKMjFkTCC99CTVkG/Adobe%20Express%20-%20shutterstock_1091554281.mp4" autoplay loop muted playsinline src="https://cdn.mos.cms.futurecdn.net/DJ3Z8XMKMjFkTCC99CTVkG/Adobe%20Express%20-%20shutterstock_1091554281.mp4"></video></div><p>This is where AI can help. With more sensors and more users, it will become better at finding patterns that may warrant alerting your doctor or wellness team. In a time-sensitive health emergency, AI could potentially trigger an alert to your medical provider on its own, similar to Google's <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> or crash/fall detection.</p><p>Representatives from Oura, Circular, and Withings <em>all</em> emphasised the importance of wearable data being more accessible to a user’s healthcare team in the future, with AI playing a crucial role as the middleman.</p><p>“In the future, [wearable tech] could support clinical applications like remote patient monitoring, early detection of chronic conditions, or continuous tracking of biomarkers relevant to metabolic, cardiovascular, or hormonal health. They may enable secure sharing of health data with care teams, integrate with electronic health records, or even assist with medication adherence through real-time prompts,” predicts Russell.</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:3800px;"><p class="vanilla-image-block" style="padding-top:1.50%;"><img id="tbPV7PssS9CM7F6eRoMcB3" name="World-in-2035-horiz-line" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/tbPV7PssS9CM7F6eRoMcB3.png" mos="" align="middle" fullscreen="" width="3800" height="57" attribution="" endorsement="" class=""></p></div></div></figure><h2 id="but-also-seamless-smart-features-that-make-life-easier">But also, seamless smart features that make life easier </h2><p>If you’re like me, not so hot with remembering names, I’ve got great news. Tomorrow’s wearable tech may make awkward social situations a thing of the past.</p><p>“The smart contact lens will act as the ultimate personal assistant embedded directly into your vision and capable of analyzing complex social environments in real-time,” says Roman Axelrod, the (other) co-founder of Xpanceo.</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:1001px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="eo9SeWeF6wjG3BwGGnhKKW" name="wearables_3" alt="World in 2035: Wearables" src="https://cdn.mos.cms.futurecdn.net/eo9SeWeF6wjG3BwGGnhKKW.jpg" mos="" align="middle" fullscreen="" width="1001" height="563" 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>“Yes, at a party, the lenses could scan the room and instantly recognize faces, drawing on your personal contacts and social databases to remind you of people’s names, how you met, and important details about them before you even approach,” says Alexlrod, though he acknowledges that privacy concerns and regulations for such features are still far from being sorted out.</p><div><blockquote><p>“The smart contact lens will act as the ultimate personal assistant embedded directly into your vision and capable of analyzing complex social environments in real-time.”</p><p>— Roman Axelrod, Xpanceo co-founder</p></blockquote></div><p>You can also expect these next-gen devices to potentially improve our human capabilities, Inspector Gadget-style. For example, InWith CEO Michael Hayes predicts that smart contacts in 2035 will not only offer night vision but potentially even zoom capabilities.</p><p>“Seeing better in the dark is an advanced function, but we’ve already made significant progress. We can engineer lenses that enhance low-light vision. Nanoparticles alter the way the lens interacts with incoming light, effectively expanding what the eye can perceive in dim environments,” says Dr. Volkov.</p><p>“The idea of zooming in on distant objects is perhaps the most futuristic, but not impossible. This feature would require smart lenses with materials whose refractive properties can be dynamically controlled. Using electrical signals, the lens could adjust how it focuses light, effectively creating a variable ‘optical zoom’ function.”</p><p>“Although this technology is still in the research phase,” Volkov says, he also suspects that rapid progress in the field should mean working prototypes well before 2035. </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:3800px;"><p class="vanilla-image-block" style="padding-top:1.50%;"><img id="tbPV7PssS9CM7F6eRoMcB3" name="World-in-2035-horiz-line" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/tbPV7PssS9CM7F6eRoMcB3.png" mos="" align="middle" fullscreen="" width="3800" height="57" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="da55a480-ed60-4498-9a8a-df156466fe51">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:61.35%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/wHkEgfvEsaWMP4HT8QA5eG.jpg" alt="The World in 2035"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong>• </strong><a href="https://www.tomsguide.com/ai/from-hyper-personal-assistants-to-mind-reading-tech-this-is-how-ai-will-transform-everything-by-2035" target="_blank"><strong>Artificial Intelligence</strong></a><strong> </strong><br><strong>• </strong><a href="https://www.tomsguide.com/computing/smart-glasses/smart-glasses-revolution-inside-the-biggest-tech-trend-of-the-next-10-years" target="_blank"><strong>Smart Glasses</strong></a><strong></strong><br><strong>• </strong><a href="https://www.tomsguide.com/tech/the-future-of-wearable-wellness-tech-5-wild-predictions-for-2035-according-to-experts-and-industry-leaders" target="_blank"><strong>Wearable Tech</strong></a><strong></strong><br><strong>• </strong><a href="https://www.tomsguide.com/phones/what-will-our-phones-be-like-in-2035" target="_blank"><strong>Smartphones</strong></a><strong> </strong><br><strong>• </strong><a href="https://www.tomsguide.com/phones/iphones/meet-the-iphone-of-2035-its-the-mainframe-on-your-body" target="_blank"><strong>iPhones</strong></a><strong></strong><br><strong>• </strong><a href="https://www.tomsguide.com/home/smart-home/heres-what-your-home-robot-will-actually-be-like-by-2035"><strong>Robots</strong></a><strong></strong><br><strong>• </strong><a href="https://www.tomsguide.com/vehicle-tech/evs/flying-cars-heres-what-our-vehicles-will-do-by-2035" target="_blank"><strong>Cars</strong></a><strong></strong><br><strong>• </strong><a href="https://www.tomsguide.com/tvs/your-tv-in-2035-will-be-wildly-different-and-its-not-what-you-think" target="_blank"><strong>TVs</strong></a></p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ The World in 2035: A Sneak Peek at the Gadgets of Tomorrow  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/the-world-in-2035</link>
                                                                            <description>
                            <![CDATA[ From smart patches that can read your vitals to AR glasses that could replace your phone, Tom’s Guide takes a deep dive into what’s next for tech. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5ZS2PD9vQXC4d6wfYwyzU6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/pER84tQnpPPUUrjgnFBojd-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 11 Aug 2025 12:00:00 +0000</pubDate>                                                                                                                                <updated>Mon, 11 Aug 2025 16:05:45 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/pER84tQnpPPUUrjgnFBojd-1280-80.jpg">
                                                            <media:credit><![CDATA[ ]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The World in 2035]]></media:description>                                                            <media:text><![CDATA[The World in 2035]]></media:text>
                                <media:title type="plain"><![CDATA[The World in 2035]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/pER84tQnpPPUUrjgnFBojd-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><em>You’re on your way to work in the year 2035. Despite the heavy traffic, you’re relaxing in the comfort of your EV while it drives itself through the city.</em></p><p><em>Last night you fell asleep while watching a movie — but your bedroom TV knew exactly when you stopped paying attention. You easily pick back up where you left off, streaming the last ten minutes on the car’s OLED display that curves around the interior.</em></p><p><em>After first suggesting some new restaurants for lunch, the personal AI on your wrist anticipates the end of the movie and asks if you’d like to organize a multiplayer racing game with your best friend. A few minutes later you get a notification on your smartglasses display — your friend has logged on and is ready to play.</em></p><p><em>Unfolding your phone into a large tablet, you jump right into the game on a low-latency 6G network. A widget in the corner of your glasses allows you to track subtle changes in your heart rate as you battle to overtake your friend for first place.</em></p><div  class="fancy-box"><div class="fancy_box-title">Explore The World in 2035</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="gx3tawnstwuYpuchhrH25i" name="World-in-2035_Logo_v16-9-300-2" caption="" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/gx3tawnstwuYpuchhrH25i.png" mos="" link="" align="" fullscreen="" width="" height="" attribution="" endorsement="" class="pinterest-pin-exclude"></p></div></div></figure><p class="fancy-box__body-text"><strong></strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/ai/from-hyper-personal-assistants-to-mind-reading-tech-this-is-how-ai-will-transform-everything-by-2035" target="_blank"><strong>AI</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/computing/smart-glasses/smart-glasses-revolution-inside-the-biggest-tech-trend-of-the-next-10-years" target="_blank"><strong>Smart Glasses</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/tech/the-future-of-wearable-wellness-tech-5-wild-predictions-for-2035-according-to-experts-and-industry-leaders" target="_blank"><strong>Wearable Tech</strong></a><strong></strong><br><strong></strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/phones/what-will-our-phones-be-like-in-2035" target="_blank"><strong>Smartphones</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/phones/iphones/meet-the-iphone-of-2035-its-the-mainframe-on-your-body" target="_blank"><strong>iPhones</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/home/smart-home/heres-what-your-home-robot-will-actually-be-like-by-2035" target="_blank"><strong>Robots</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/vehicle-tech/evs/flying-cars-heres-what-our-vehicles-will-do-by-2035" target="_blank"><strong>Cars</strong></a><strong>  |  </strong><a data-analytics-id="inline-link" href="https://www.tomsguide.com/tvs/your-tv-in-2035-will-be-wildly-different-and-its-not-what-you-think" target="_blank"><strong>TVs</strong></a></p></div></div><p>This may read like science fiction, but it’s closer than you think.</p><p>To envision where our relationship with technology is heading, Tom’s Guide talked to some of the leading experts in artificial intelligence, autonomous vehicles, wearable devices and robotics — including companies such as Samsung, Oura, Qualcomm, General Motors, LG and Amazon.</p><p>A decade from now, how will we interact with our cars, phones, TVs and wearables? How will our lives be reimagined by artificial intelligence and robots? </p><p>Welcome to the World in 2035.</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:4000px;"><p class="vanilla-image-block" style="padding-top:2.40%;"><img id="yZwKgGuAvg2uEXodGxvZTY" name="World-in-2035-divider3" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/yZwKgGuAvg2uEXodGxvZTY.png" mos="" align="middle" fullscreen="" width="4000" height="96" attribution="" endorsement="" class=""></p></div></div></figure><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:8.75%;"><img id="jyGAqukhkmi69PXEY35CUC" name="World-in-2035-horiz-3-wearables" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/jyGAqukhkmi69PXEY35CUC.png" mos="" align="middle" fullscreen="" width="2000" height="175" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="5b226f47-00d6-4eb1-9f3a-23710ed13c04">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:56.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/CJb2nqtAqiKCeMhQmoh223.jpg" alt="The World in 2035: Wearables"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><a href="https://www.tomsguide.com/tech/the-future-of-wearable-wellness-tech-5-wild-predictions-for-2035-according-to-experts-and-industry-leaders" target="_blank"><strong>The future of wearable wellness tech: 5 wild predictions for 2035 according to experts and industry leaders</strong></a></p><p>The Apple Watch that arrives in 2035 could have enough battery power to last forever. We can also see stick-on ‘smart patches’ that continuously monitor your vitals while looking out for troubling trends. And next-gen ‘smart contacts’ could help you see in the dark or even put names to faces.</p></p>                </div>                            </div>        </div><a href="https://www.tomsguide.com/tech/the-future-of-wearable-wellness-tech-5-wild-predictions-for-2035-according-to-experts-and-industry-leaders"><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2996px;"><p class="vanilla-image-block" style="padding-top:1.90%;"><img id="SuEtwjv3ZGHFo34pnjKK6P" name="World-in-2035-horiz-READ MORE" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/SuEtwjv3ZGHFo34pnjKK6P.png" mos="" align="middle" fullscreen="" width="2996" height="57" attribution="" endorsement="" class=""></p></div></div></figure></a><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:2.40%;"><img id="yZwKgGuAvg2uEXodGxvZTY" name="World-in-2035-divider3" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/yZwKgGuAvg2uEXodGxvZTY.png" mos="" align="middle" fullscreen="" width="4000" height="96" attribution="" endorsement="" class=""></p></div></div></figure><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:8.75%;"><img id="8TPdgu8dK2Xr2E7kk9prRB" name="World-in-2035-horiz-8-robots" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/8TPdgu8dK2Xr2E7kk9prRB.png" mos="" align="middle" fullscreen="" width="2000" height="175" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="9d52391e-931c-4b22-88c0-3aaf26698439">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:56.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/rcn4EiyxnfJPCz9oRAfCZi.jpg" alt="Futuristic TV concept"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong></strong><a href="https://www.tomsguide.com/tvs/your-tv-in-2035-will-be-wildly-different-and-its-not-what-you-think" target="_blank"><strong>Your TV in 2035 will be wildly different — and it’s not what you think</strong></a></p><p>The future of TVs looks pretty tantalizing, including MicroLED finally going mainstream, next-generation “dream OLED” panels and a leap in AI assistants that know what you want to watch before you do.</p></p>                </div>                            </div>        </div><a href="https://www.tomsguide.com/tvs/your-tv-in-2035-will-be-wildly-different-and-its-not-what-you-think"><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2996px;"><p class="vanilla-image-block" style="padding-top:1.90%;"><img id="SuEtwjv3ZGHFo34pnjKK6P" name="World-in-2035-horiz-READ MORE" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/SuEtwjv3ZGHFo34pnjKK6P.png" mos="" align="middle" fullscreen="" width="2996" height="57" attribution="" endorsement="" class=""></p></div></div></figure></a><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:2.40%;"><img id="yZwKgGuAvg2uEXodGxvZTY" name="World-in-2035-divider3" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/yZwKgGuAvg2uEXodGxvZTY.png" mos="" align="middle" fullscreen="" width="4000" height="96" attribution="" endorsement="" class=""></p></div></div></figure><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:8.75%;"><img id="Tt4TWTQBRZPCMCRhY5hkRB" name="World-in-2035-horiz-7-cars" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/Tt4TWTQBRZPCMCRhY5hkRB.png" mos="" align="middle" fullscreen="" width="2000" height="175" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="7b0b8ef9-cd3f-45a2-9521-5ce076b522fd">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:56.26%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/7zJLVwZMBpuQDgfGXKoCtD.jpg" alt="World in 2035"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong></strong><a href="https://www.tomsguide.com/vehicle-tech/evs/flying-cars-heres-what-our-vehicles-will-do-by-2035" target="_blank"><strong>I dreamed of flying cars, but the automotive reality of 2035 is even more revolutionary</strong></a></p><p>Your car will feel very different from today, thanks in part to advances in autonomous driving, more efficient battery technologies, and how AI will be a main driving force behind everything by 2035 — including aerial vehicles.</p></p>                </div>                            </div>        </div><a href="https://www.tomsguide.com/vehicle-tech/evs/flying-cars-heres-what-our-vehicles-will-do-by-2035"><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2996px;"><p class="vanilla-image-block" style="padding-top:1.90%;"><img id="SuEtwjv3ZGHFo34pnjKK6P" name="World-in-2035-horiz-READ MORE" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/SuEtwjv3ZGHFo34pnjKK6P.png" mos="" align="middle" fullscreen="" width="2996" height="57" attribution="" endorsement="" class=""></p></div></div></figure></a><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:2.40%;"><img id="yZwKgGuAvg2uEXodGxvZTY" name="World-in-2035-divider3" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/yZwKgGuAvg2uEXodGxvZTY.png" mos="" align="middle" fullscreen="" width="4000" height="96" attribution="" endorsement="" class=""></p></div></div></figure><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:8.75%;"><img id="gppHQXuaPFyNUvrEXBvFUC" name="World-in-2035-horiz-6-robots" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/gppHQXuaPFyNUvrEXBvFUC.png" mos="" align="middle" fullscreen="" width="2000" height="175" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="0a587642-4f00-4c5a-b825-b440eb282b19">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:56.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YKM5dd9BTgtYMsrHN6WZgV.jpg" alt="The World in 2035: Robots"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><a href="https://www.tomsguide.com/home/smart-home/heres-what-your-home-robot-will-actually-be-like-by-2035" target="_blank"><strong>Forget "I, Robot" — here's what your home robot will actually be like by 2035</strong></a></p><p>From “The Jetsons” to “I, Robot,” the future has been imagined with all of us living with humanoid robots in our home. But how close are we to having personal C-3POs? Here’s what the next ten years will really bring us. </p></p>                </div>                            </div>        </div><a href="https://www.tomsguide.com/home/smart-home/heres-what-your-home-robot-will-actually-be-like-by-2035"><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2996px;"><p class="vanilla-image-block" style="padding-top:1.90%;"><img id="SuEtwjv3ZGHFo34pnjKK6P" name="World-in-2035-horiz-READ MORE" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/SuEtwjv3ZGHFo34pnjKK6P.png" mos="" align="middle" fullscreen="" width="2996" height="57" attribution="" endorsement="" class=""></p></div></div></figure></a><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:2.40%;"><img id="yZwKgGuAvg2uEXodGxvZTY" name="World-in-2035-divider3" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/yZwKgGuAvg2uEXodGxvZTY.png" mos="" align="middle" fullscreen="" width="4000" height="96" attribution="" endorsement="" class=""></p></div></div></figure><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:8.75%;"><img id="8gykKWNwFt8xL4RzgefGjE" name="World-in-2035-horiz-1-AI" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/8gykKWNwFt8xL4RzgefGjE.png" mos="" align="middle" fullscreen="" width="2000" height="175" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="dc6b3d2b-e789-4ce8-82fd-055895855818">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:56.25%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mtoDfKpiiwbzam7hDwTXtU.jpg" alt="Artificial intelligence "AI" and brain glowing next to a smartphone screen"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong></strong><a href="https://www.tomsguide.com/ai/from-hyper-personal-assistants-to-mind-reading-tech-this-is-how-ai-will-transform-everything-by-2035"><strong>From hyper-personal assistants to mind-reading tech — this is how AI will transform everything by 2035</strong></a></p><p>By 2035, AI will go way beyond a mere assistant. It will anticipate your needs, sense your mood and reshape your home and work life. The question won’t be what AI can do, but <em>what we’ll let it do</em>.</p></p>                </div>                            </div>        </div><a href="https://www.tomsguide.com/ai/from-hyper-personal-assistants-to-mind-reading-tech-this-is-how-ai-will-transform-everything-by-2035"><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2996px;"><p class="vanilla-image-block" style="padding-top:1.90%;"><img id="SuEtwjv3ZGHFo34pnjKK6P" name="World-in-2035-horiz-READ MORE" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/SuEtwjv3ZGHFo34pnjKK6P.png" mos="" align="middle" fullscreen="" width="2996" height="57" attribution="" endorsement="" class=""></p></div></div></figure></a><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:2.40%;"><img id="yZwKgGuAvg2uEXodGxvZTY" name="World-in-2035-divider3" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/yZwKgGuAvg2uEXodGxvZTY.png" mos="" align="middle" fullscreen="" width="4000" height="96" attribution="" endorsement="" class=""></p></div></div></figure><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:8.75%;"><img id="5p7ui332hUfCHEFRjdX37P" name="World-in-2035-horiz-2-Smartglasses" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/5p7ui332hUfCHEFRjdX37P.png" mos="" align="middle" fullscreen="" width="2000" height="175" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="056a2aac-ee18-4771-bb69-ee6255174863">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:56.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/GJcejDjjQqtV2afx94DKok.jpg" alt="The World in 2035: Smart Glasses"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong></strong><a href="https://www.tomsguide.com/computing/smart-glasses/smart-glasses-revolution-inside-the-biggest-tech-trend-of-the-next-10-years" target="_blank"><strong>Smart Glasses Revolution: Inside the biggest tech trend of the next 10 years</strong></a></p><p>Right now, smart glasses either give you the best of AR or the best of AI. By 2035 we’ll get the best of both worlds — turning these into the all-in-one device that could replace your smartphone, and going beyond with sensors that can track your physical and mental health.</p></p>                </div>                            </div>        </div><a href="https://www.tomsguide.com/computing/smart-glasses/smart-glasses-revolution-inside-the-biggest-tech-trend-of-the-next-10-years"><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2996px;"><p class="vanilla-image-block" style="padding-top:1.90%;"><img id="SuEtwjv3ZGHFo34pnjKK6P" name="World-in-2035-horiz-READ MORE" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/SuEtwjv3ZGHFo34pnjKK6P.png" mos="" align="middle" fullscreen="" width="2996" height="57" attribution="" endorsement="" class=""></p></div></div></figure></a><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:2.40%;"><img id="yZwKgGuAvg2uEXodGxvZTY" name="World-in-2035-divider3" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/yZwKgGuAvg2uEXodGxvZTY.png" mos="" align="middle" fullscreen="" width="4000" height="96" attribution="" endorsement="" class=""></p></div></div></figure><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:8.75%;"><img id="p4U8BDjHtfobk4wkxJihRB" name="World-in-2035-horiz-4-phones" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/p4U8BDjHtfobk4wkxJihRB.png" mos="" align="middle" fullscreen="" width="2000" height="175" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="d50cf816-a08e-4d61-8aa3-c5c33dcd97e7">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:56.22%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qYVgeKnxkLakkqqdmiGCoW.jpg" alt="AI agent on a futuristic smartphone"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong></strong><a href="https://www.tomsguide.com/phones/what-will-our-phones-be-like-in-2035" target="_blank"><strong>What will our phones be like in 2035? We asked Samsung, Motorola, OnePlus and more about your future</strong></a></p><p>Multi-fold designs, 6G and a quantum leap in AI powers. Despite talk of smartphones making way for devices like smart glasses, experts say the phone is here to stay. Here’s how your smartphone could evolve over the next decade.</p></p>                </div>                            </div>        </div><a href="https://www.tomsguide.com/phones/what-will-our-phones-be-like-in-2035"><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2996px;"><p class="vanilla-image-block" style="padding-top:1.90%;"><img id="SuEtwjv3ZGHFo34pnjKK6P" name="World-in-2035-horiz-READ MORE" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/SuEtwjv3ZGHFo34pnjKK6P.png" mos="" align="middle" fullscreen="" width="2996" height="57" attribution="" endorsement="" class=""></p></div></div></figure></a><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:2.40%;"><img id="yZwKgGuAvg2uEXodGxvZTY" name="World-in-2035-divider3" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/yZwKgGuAvg2uEXodGxvZTY.png" mos="" align="middle" fullscreen="" width="4000" height="96" attribution="" endorsement="" class=""></p></div></div></figure><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:8.75%;"><img id="uWHZJfNoBKJ3uZEKPcKJUC" name="World-in-2035-horiz-5-iphones" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/uWHZJfNoBKJ3uZEKPcKJUC.png" mos="" align="middle" fullscreen="" width="2000" height="175" attribution="" endorsement="" class=""></p></div></div></figure>        <div class="featured_product_block featured_block_horizontal" data-id="80b38d60-f3f9-4331-b238-8b4b13f297ef">            <div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:56.28%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YkCnXfhbsXCdoVZvTNNpsX.jpg" alt="World in 2035: iPhones of the Future"></p></div>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                                                                <div class="featured__title"></div>                                    </div>                <div class="subtitle__description">                                                            <p><p><strong></strong><a href="https://www.tomsguide.com/phones/iphones/meet-the-iphone-of-2035-its-the-mainframe-on-your-body" target="_blank"><strong>Meet the iPhone of 2035 — it’s the ‘mainframe on your body'</strong></a></p><p>What is Apple planning for the iPhone over the next decade? We talked to some leading Apple experts on what they think the iPhone of 2035 might have to offer.</p></p>                </div>                            </div>        </div><a href="https://www.tomsguide.com/phones/iphones/meet-the-iphone-of-2035-its-the-mainframe-on-your-body"><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2996px;"><p class="vanilla-image-block" style="padding-top:1.90%;"><img id="SuEtwjv3ZGHFo34pnjKK6P" name="World-in-2035-horiz-READ MORE" alt="The World in 2035" src="https://cdn.mos.cms.futurecdn.net/SuEtwjv3ZGHFo34pnjKK6P.png" mos="" align="middle" fullscreen="" width="2996" height="57" attribution="" endorsement="" class=""></p></div></div></figure></a>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Tom's Guide Awards 2025: All the big winners across 12 categories from phones to homes ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/toms-guide-awards-2025</link>
                                                                            <description>
                            <![CDATA[ These are the Tom's Guide Awards 2025 winners across categories like TVs, AI, Photography, Automotive, Sleep, Streaming and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qmER7VHSDkJzLXJd8EbkPF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/v7hNHTtHfGpq44z9Aq6yE7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 03 Aug 2025 06:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/v7hNHTtHfGpq44z9Aq6yE7-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Tom&#039;s Guide Awards 2025 badge on a multicolored background]]></media:description>                                                            <media:text><![CDATA[The Tom&#039;s Guide Awards 2025 badge on a multicolored background]]></media:text>
                                <media:title type="plain"><![CDATA[The Tom&#039;s Guide Awards 2025 badge on a multicolored background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/v7hNHTtHfGpq44z9Aq6yE7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Please join us in giving a round of applause to all of the winners in the Tom’s Guide Awards 2025.</p><p>Now in its sixth year, the Tom’s Guide Awards celebrates our favorite products, devices and services across all of the different categories we cover across our entire site including two new ones for this year’s awards. Our experts have tested and reviewed hundreds of different products to help you find the best new additions and upgrades to improve your daily life.</p><p>From TVs with brilliant picture quality and massive displays, innovative laptops that make it easier to get more done on the go and the latest smartphones to the most exciting kitchen tech, top fitness gadgets, our favorite streaming service and even the latest AI tools and sleep gear, the Tom’s Guide Awards 2025 honors them all.</p><p>Here are all of the winners from this year’s awards and if you head to the award announcement stories at the bottom of each category, you can read more on why we selected each of these products for their respective awards.</p><h3 class="article-body__section" id="section-hero-awards"><span>Hero Awards</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="iBn5nWjEkgyazcxHPYF2hS" name="TG Awards 2025 Hero LIST" alt="Tom's Guide 2025 Hero Awards" src="https://cdn.mos.cms.futurecdn.net/iBn5nWjEkgyazcxHPYF2hS.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best new product: </strong><a href="https://www.tomsguide.com/ai/google-gemini/i-tested-gemini-live-for-24-hours-the-good-the-bad-and-the-weird"><strong>Gemini Live</strong></a><strong></strong></li><li><strong>Innovation award: </strong><a href="https://www.tomsguide.com/computing/laptops/gaming-laptops/asus-rog-flow-z13-2025-review"><strong>Asus ROG Flow Z13</strong></a><strong></strong></li><li><strong>Best company award: </strong><a href="https://www.tomsguide.com/ai/anthropic-is-putting-a-limit-on-a-claude-ai-feature-because-people-are-using-it-24-7"><strong>Anthropic</strong></a><strong></strong></li><li><strong>Sustainability in tech: </strong><a href="https://www.tomsguide.com/computing/laptops/i-just-built-the-new-framework-laptop-12-and-this-upgrade-is-a-game-changer-heres-why"><strong>Framework Laptop 12</strong></a><strong></strong></li><li><strong>Best product design: </strong><a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><strong>Samsung Galaxy Z Fold 7</strong></a></li></ul><p><em>Find out more about all the winners in the </em><a href="https://www.tomsguide.com/tech/toms-guide-hero-awards-2025"><em>Tom's Guide Awards 2025 Hero Awards</em></a></p><h3 class="article-body__section" id="section-phones"><span>Phones</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="w7PAueLTDb5ZEXcBn4CsZ9" name="TG Awards 2025 Phones LIST" alt="Tom's Guide Awards 2025: Phones" src="https://cdn.mos.cms.futurecdn.net/w7PAueLTDb5ZEXcBn4CsZ9.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best phone: </strong><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-ultra-review"><strong>Samsung Galaxy S25 Ultra</strong></a><strong></strong></li><li><strong>Best iPhone: </strong><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-pro-review"><strong>iPhone 16 Pro</strong></a><strong></strong></li><li><strong>Best Android phone: </strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-pro-review"><strong>Google Pixel 9 Pro</strong></a><strong></strong></li><li><strong>Best camera phone: </strong><a href="https://www.tomsguide.com/phones/i-shot-over-200-photos-with-the-galaxy-s25-ultra-vs-pixel-9-pro-xl-heres-the-winner"><strong>Samsung Galaxy S25 Ultra</strong></a><strong></strong></li><li><strong>Best AI phone: </strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review"><strong>Google Pixel 9</strong></a><strong></strong></li><li><strong>Best foldable phone: </strong><a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-z-flip-7-hands-on-review-feels-like-flip-phone-perfection"><strong>Samsung Galaxy Z Flip 7</strong></a><strong></strong></li><li><strong>Best phone design: </strong><a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><strong>Samsung Galaxy Z Fold 7</strong></a><strong></strong></li><li><strong>Best phone battery life: </strong><a href="https://www.tomsguide.com/phones/android-phones/asus-rog-phone-9-pro-review-gaming-pro-and-battery-life-legend"><strong>Asus ROG Phone 9 Pro</strong></a><strong></strong></li><li><strong>Best budget phone: </strong><a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9a-review"><strong>Google Pixel 9a</strong></a></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/phones/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Phones</em></a></p><h3 class="article-body__section" id="section-active-life"><span>Active Life</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Vkgu3Y6QhYkiEtXWXSo8jH" name="TG Awards 2025 Active Life LIST" alt="Tom's Guide Awards 2025: Active Life" src="https://cdn.mos.cms.futurecdn.net/Vkgu3Y6QhYkiEtXWXSo8jH.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best smartwatch: </strong><a href="https://www.tomsguide.com/Garmin-Instinct-3-review"><strong>Garmin Instinct 3</strong></a><strong></strong></li><li><strong>Best fitness tracker: </strong><a href="https://www.tomsguide.com/wellness/fitness-trackers/oura-ring-4-review"><strong>Oura Ring 4</strong></a><strong></strong></li><li><strong>Best running watch: </strong><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-forerunner-970-review-my-new-favorite-sports-watch"><strong>Garmin Forerunner 970</strong></a><strong></strong></li><li><strong>Best workout headphones: </strong><a href="https://www.tomsguide.com/audio/beats-powerbeats-pro-2-review"><strong>Beats Powerbeats Pro 2</strong></a><strong></strong></li><li><strong>Best massage gun: </strong><a href="https://www.tomsguide.com/wellness/fitness/bob-and-brad-m7-plus-mini-massage-gun-review"><strong>Bob and Brad M7 Plus Mini</strong></a><strong></strong></li><li><strong>Best running shoes: </strong><a href="https://www.tomsguide.com/wellness/running/asics-novablast-5-review"><strong>Asics Novablast 5</strong></a><strong></strong></li><li><strong>Best hiking boots: </strong><a href="https://www.tomsguide.com/wellness/fitness/timberland-motion-access-mid-waterproof-sneaker-review-comfortable-stylish-and-no-break-in-period"><strong>Timberland Motion Access Mid</strong></a><strong></strong></li><li><strong>Best outerwear: </strong><a href="https://www.tomsguide.com/wellness/fitness/patagonia-nano-air-ultralight-review-outrageous-comfort-doesnt-come-cheap"><strong>Patagonia Nano-Air Ultralight</strong></a><strong></strong></li><li><strong>Best workout app: </strong><a href="https://www.tomsguide.com/reviews/runna-app"><strong>Runna</strong></a><strong></strong></li><li><strong>Best adjustable dumbbells: </strong><a href="https://www.tomsguide.com/wellness/fitness/my-all-time-favorite-budget-adjustable-dumbbells-are-just-usd165-right-now-for-prime-day-and-they-load-up-to-25lbs"><strong>LifePro PowerFlow Plus</strong></a><strong></strong></li><li><strong>Best electric scooter: </strong><a href="https://www.tomsguide.com/home/electric-scooters/segway-ninebot-ekickscooter-max-g3-review"><strong>Segway Max G3</strong></a><strong></strong></li><li><strong>Best electric bike: </strong><a href="https://www.tomsguide.com/reviews/rad-power-radcity-5-plus"><strong>Rad Power RadCity 5 Plus</strong></a><strong></strong></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/wellness/fitness/toms-guide-awards-2025-our-favorite-health-and-fitness-gear-to-power-an-active-life"><em>Tom's Guide Awards 2025 for Active Life</em></a></p><h3 class="article-body__section" id="section-computing"><span>Computing</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="B4aqDYHPsc4T96FtNzZCXP" name="TG Awards 2025 Computing LIST" alt="Tom's Guide Awards 2025 Computing" src="https://cdn.mos.cms.futurecdn.net/B4aqDYHPsc4T96FtNzZCXP.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best laptop: </strong><a href="https://www.tomsguide.com/computing/laptops/macbook-air-m4-review"><strong>Apple MacBook Air M4</strong></a><strong></strong></li><li><strong>Best AI laptop: </strong><a href="https://www.tomsguide.com/reviews/msi-prestige-16-ai-evo"><strong>MSI Prestige 16 AI Evo</strong></a><strong></strong></li><li><strong>Best keyboard: </strong><a href="https://www.tomsguide.com/computing/peripherals/zsa-moonlander-review-the-most-customizable-keyboard-ive-ever-used"><strong>ZSA Moonlander</strong></a><strong></strong></li><li><strong>Best gaming laptop: </strong><a href="https://www.tomsguide.com/computing/gaming-laptops/alienware-16-area-51-gaming-laptop-review"><strong>Alienware Area-51</strong></a><strong></strong></li><li><strong>Best 2-in-1 laptop: </strong><a href="https://www.tomsguide.com/computing/laptops/gaming-laptops/asus-rog-flow-z13-2025-review"><strong>Asus ROG Flow Z13</strong></a><strong></strong></li><li><strong>Best monitor: </strong><a href="https://www.tomsguide.com/computing/monitors/lg-ultragear-45gx950a-b-review"><strong>LG 5K2K ultrawide</strong></a><strong></strong></li><li><strong>Best AR Glasses: </strong><a href="https://www.tomsguide.com/computing/vr-ar/smart-glasses/xreal-one-pro-ar-glasses-review"><strong>Xreal One Pro</strong></a><strong></strong></li><li><strong>Best webcam: </strong><a href="https://www.tomsguide.com/computing/peripherals/insta360-link-2c-review"><strong>Insta360 Link 2C</strong></a><strong></strong></li><li><strong>Best tablet: </strong><a href="https://www.tomsguide.com/tablets/ipads/ipad-air-m3-review"><strong>iPad Air M3</strong></a><strong></strong></li><li><strong>Best router: </strong><a href="https://www.tomsguide.com/computing/routers/netgear-nighthawk-rs600-review"><strong>Netgear Nighthawk RS600</strong></a><strong></strong></li><li><strong>Best mesh router: </strong><a href="https://www.tomsguide.com/computing/routers/asus-bq16-pro-review"><strong>Asus ZenWiFi BQ16 Pro</strong></a><strong></strong></li><li><strong>Best antivirus: </strong><a href="https://www.tomsguide.com/computing/antivirus/norton-360-deluxe-antivirus-review"><strong>Norton 360 Deluxe</strong></a><strong></strong></li><li><strong>Best VPN: </strong><a href="https://www.tomsguide.com/reviews/nordvpn-review"><strong>NordVPN</strong></a></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/computing/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Computing</em></a><em>.</em></p><h3 class="article-body__section" id="section-audio"><span>Audio </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="MAdoEdLdNF2GxcWigEk4v" name="TG Awards 2025 Audio LIST" alt="Tom's Guide Awards 2025 Audio" src="https://cdn.mos.cms.futurecdn.net/MAdoEdLdNF2GxcWigEk4v.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best headphones: </strong><a href="https://www.tomsguide.com/audio/bowers-and-wilkins-px7-s3-review"><strong>Bowers & Wilkins PX7 S3</strong></a><strong></strong></li><li><strong>Best noise-cancelling headphones: </strong><a href="https://www.tomsguide.com/audio/over-ear-headphones/sony-wh-1000xm6-review"><strong>Sony WH-1000XM6</strong></a><strong></strong></li><li><strong>Best noise-cancelling earbuds: </strong><a href="https://www.tomsguide.com/audio/earbuds/noble-fokus-amadeus-review"><strong>Noble Fokus Amadeus</strong></a><strong></strong></li><li><strong>Best wireless earbuds: </strong><a href="https://www.tomsguide.com/audio/earbuds/sony-wf-c710n-wireless-earbuds-review"><strong>Sony WF-C710N</strong></a><strong></strong></li><li><strong>Best audiophile headphones: </strong><a href="https://www.tomsguide.com/audio/final-d8000-dc-review"><strong>Final D8000 DC</strong></a><strong></strong></li><li><strong>Best soundbar: </strong><a href="https://www.tomsguide.com/audio/soundbars/marshall-heston-120-soundbar-review-rock-n-roll-styling-meets-movie-magic"><strong>Marshall Heston 120</strong></a><strong></strong></li><li><strong>Best Bluetooth speaker: </strong><a href="https://www.tomsguide.com/audio/bluetooth-speakers/marshall-kilburn-iii-review"><strong>Marshall Kilburn III</strong></a><strong></strong></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/audio/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Audio</em></a></p><h3 class="article-body__section" id="section-streaming"><span>Streaming</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="XsbVTnqub7KuLcpZ8Aryjm" name="TG Awards 2025 Streaming LIST" alt="Tom's Guide Awards 2025 Streaming" src="https://cdn.mos.cms.futurecdn.net/XsbVTnqub7KuLcpZ8Aryjm.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock/Netflix/Tubi/Tom's Guide)</span></figcaption></figure><ul><li><strong>Best streaming service: </strong><a href="https://www.tomsguide.com/reviews/hbo-max"><strong>HBO Max</strong></a><strong></strong></li><li><strong>Best live TV streaming service: </strong><a href="https://www.tomsguide.com/reviews/youtube-tv"><strong>YouTube TV</strong></a><strong></strong></li><li><strong>Best sports streaming service: </strong><a href="https://www.tomsguide.com/reviews/youtube-tv"><strong>YouTube TV</strong></a><strong></strong></li><li><strong>Best free streaming service: </strong><a href="https://www.tomsguide.com/news/tubi-tv"><strong>Tubi</strong></a><strong></strong></li><li><strong>Best streaming original show: </strong><a href="https://www.tomsguide.com/entertainment/netflix/netflix-just-got-a-gripping-crime-drama-show-thats-already-hit-no-1-and-its-100-percent-on-rotten-tomatoes"><strong>Adolescence</strong></a><strong></strong></li><li><strong>Best streaming original movie: </strong><a href="https://www.tomsguide.com/entertainment/netflix/netflixs-new-crime-thriller-is-one-of-the-best-movies-of-the-year-and-its-already-92-percent-on-rotten-tomatoes"><strong>Woman of the Hour</strong></a></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/entertainment/streaming/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Streaming</em></a></p><h3 class="article-body__section" id="section-tvs"><span>TVs</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="MASah7WqLWn9ta2pEPBfwk" name="TG Awards 2025 TVs LIST" alt="Tom's Guide Awards 2025 TVs" src="https://cdn.mos.cms.futurecdn.net/MASah7WqLWn9ta2pEPBfwk.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best TV overall: </strong><a href="https://www.tomsguide.com/tvs/oled-tvs/lg-c5-oled-tv-review"><strong>LG C5 OLED</strong></a><strong></strong></li><li><strong>Best TV value: </strong><a href="https://www.tomsguide.com/tvs/tcl-qm6k-mini-led-tv-review"><strong>TCL QM6K</strong></a><strong></strong></li><li><strong>Best OLED TV: </strong><a href="https://www.tomsguide.com/tvs/4k-tvs/samsung-s95f-oled-tv-review"><strong>Samsung S95F OLED</strong></a><strong></strong></li><li><strong>Best QLED TV: </strong><a href="https://www.tomsguide.com/tvs/4k-tvs/hisense-u8qg-mini-led-tv-review"><strong>Hisense U8QG</strong></a><strong></strong></li><li><strong>Best TV design: </strong><a href="https://www.tomsguide.com/tvs/oled-tvs/lg-g5-oled-tv-review"><strong>LG G5 OLED</strong></a><strong></strong></li><li><strong>Best TV innovation: </strong><a href="https://www.tomsguide.com/tvs/oled-tvs/panasonics-2025-flagship-oled-tv-is-a-true-stunner-and-it-might-beat-lg-and-samsung"><strong>Panasonic Z95B OLED</strong></a><strong></strong></li><li><strong>Best 8K TV: </strong><a href="https://www.tomsguide.com/tvs/samsung-qn990f-neo-qled-8k-tv-review"><strong>Samsung QN990F Neo QLED</strong></a><strong></strong></li><li><strong>Best big-screen TV: </strong><a href="https://www.tomsguide.com/tvs/samsung-s90d-oled-tv-review"><strong>Samsung S90D OLED</strong></a><strong></strong></li><li><strong>Best projector: </strong><a href="https://www.tomsguide.com/tvs/hisense-c2-ultra-review"><strong>Hisense C2 Ultra</strong></a></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/tvs/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for TVs</em></a></p><h3 class="article-body__section" id="section-photography"><span>Photography</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="jaHePPVaf9wyV4vDayA937" name="TG Awards 2025 Photography LIST" alt="Tom's Guide Awards 2025 Photography" src="https://cdn.mos.cms.futurecdn.net/jaHePPVaf9wyV4vDayA937.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best mirrorless camera: </strong><a href="https://www.tomsguide.com/cameras-photography/mirrorless-cameras/nikon-z5ii-review"><strong>Nikon Z5II</strong></a><strong></strong></li><li><strong>Best action camera: </strong><a href="https://www.tomsguide.com/cameras-photography/gopro-action-cameras/dji-osmo-action-5-pro-review"><strong>DJI Osmo Action 5 Pro</strong></a><strong></strong></li><li><strong>Best 360 camera: </strong><a href="https://www.tomsguide.com/cameras-photography/gopro-action-cameras/insta360-x5-review"><strong>Insta360 X5</strong></a><strong></strong></li><li><strong>Best instant camera: </strong><a href="https://www.tomsguide.com/cameras-photography/fujifilm-instax-mini-41-instant-camera-review"><strong>Fujifilm Instax mini 41</strong></a><strong></strong></li><li><strong>Best film camera: </strong><a href="https://www.tomsguide.com/cameras-photography/pentax-17-review"><strong>Pentax 17</strong></a><strong></strong></li><li><strong>Best drone: </strong><a href="https://www.tomsguide.com/cameras-photography/drones/dji-air-3s-review"><strong>DJI Air 3S</strong></a><strong></strong></li><li><strong>Best vlogging camera: </strong><a href="https://www.tomsguide.com/cameras-photography/mirrorless-cameras/canon-eos-r50-v-review"><strong>Canon EOS R50 V</strong></a><strong></strong></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/cameras-photography/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Photography</em></a></p><h3 class="article-body__section" id="section-gaming"><span>Gaming</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="GBYCEiTFBeyewTA9GxrQjR" name="TG Awards 2025 Gaming LIST" alt="Tom's Guide Awards 2025" src="https://cdn.mos.cms.futurecdn.net/GBYCEiTFBeyewTA9GxrQjR.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best console: </strong><a href="https://www.tomsguide.com/gaming/playstation/ps5-slim"><strong>PS5 Slim</strong></a><strong></strong></li><li><strong>Best handheld gaming console: </strong><a href="https://www.tomsguide.com/gaming/handheld-gaming/lenovo-legion-go-s-hands-on-review"><strong>Lenovo Legion Go S</strong></a><strong></strong></li><li><strong>Best VR headset: </strong><a href="https://www.tomsguide.com/computing/vr-ar/meta-quest-3s-review"><strong>Meta Quest 3S</strong></a><strong></strong></li><li><strong>Best gaming monitor: </strong><a href="https://www.tomsguide.com/computing/monitors/alienware-aw3425dw-review"><strong>Alienware 34 QD-OLED</strong></a><strong></strong></li><li><strong>Best gaming keyboard: </strong><a href="https://www.tomsguide.com/computing/peripherals/lemokey-l5-he-review"><strong>Lemokey L5 HE</strong></a><strong></strong></li><li><strong>Best gaming mouse: </strong><a href="https://www.tomsguide.com/computing/peripherals/corsair-m75-mac-mouse-review"><strong>Corsair M75</strong></a><strong></strong></li><li><strong>Best gaming headset: </strong><a href="https://www.tomsguide.com/gaming/gaming-peripherals/steelseries-arctis-nova-3-wireless-review"><strong>SteelSeries Arctis Nova 3 Wireless</strong></a><strong></strong></li><li><strong>Best gaming chair: </strong><a href="https://www.tomsguide.com/gaming/gaming-peripherals/dxracer-martian-review"><strong>DX Racer Martian</strong></a><strong></strong></li><li><strong>Best game subscription service: </strong><a href="https://www.tomsguide.com/gaming/handheld-gaming/nvidia-geforce-now-steam-deck-hands-on-test"><strong>Nvidia GeForce Now</strong></a><strong></strong></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/gaming/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Gaming</em></a></p><h3 class="article-body__section" id="section-ai"><span>AI</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="NV8rxefokJpuu6SzwR4SMo" name="TG Awards 2025 AI LIST" alt="Tom's Guide Awards 2025" src="https://cdn.mos.cms.futurecdn.net/NV8rxefokJpuu6SzwR4SMo.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best AI chatbot: </strong><a href="https://www.tomsguide.com/ai/what-is-claude-everything-you-need-to-know-about-anthropics-ai-powerhouse"><strong>Claude</strong></a><strong></strong></li><li><strong>Best AI image generator: </strong><a href="https://www.tomsguide.com/ai/chatgpts-4o-image-generation-is-a-mindblowing-upgrade-7-examples-of-it-in-action"><strong>ChatGPT</strong></a><strong></strong></li><li><strong>Best AI video generator: </strong><a href="https://www.tomsguide.com/ai/google-veo-3-and-flow-the-future-of-ai-filmmaking-is-here-heres-how-it-works"><strong>Veo 3</strong></a><strong></strong></li><li><strong>Best AI music generator: </strong><a href="https://www.tomsguide.com/ai/make-your-own-music-with-riffusion-ai-5-prompts-to-get-started"><strong>Riffusion</strong></a><strong></strong></li><li><strong>Best AI device: </strong><a href="https://www.tomsguide.com/ai/plaud-notepin-review"><strong>Plaud NotePin</strong></a><strong></strong></li><li><strong>Best AI phone feature: </strong><a href="https://www.tomsguide.com/ai/google-gemini/i-tested-gemini-live-for-24-hours-the-good-the-bad-and-the-weird"><strong>Gemini Live</strong></a></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/ai/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for AI</em></a></p><h3 class="article-body__section" id="section-automotive"><span>Automotive</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="pVVTPyiosxCAh2CfL7hte9" name="TG Awards 2025 Auto LIST" alt="Tom's Guide Awards 2025 Automotive" src="https://cdn.mos.cms.futurecdn.net/pVVTPyiosxCAh2CfL7hte9.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best design: </strong><a href="https://www.tomsguide.com/vehicle-tech/evs/i-drove-the-2025-volkswagen-id-buzz-for-a-week-and-it-gets-more-attention-than-any-other-ev-on-the-road#section-2025-volkswagen-id-buzz-pro-s-plus-4motion-what-i-like"><strong>Volkswagen ID.Buzz</strong></a><strong></strong></li><li><strong>Best EV: </strong><a href="https://www.tomsguide.com/vehicle-tech/evs/i-drove-the-volvo-ex30-for-a-week-and-its-the-ev-id-buy-with-my-own-money#section-2025-volvo-ex30-testing-summary"><strong>Volvo EX30</strong></a><strong></strong></li><li><strong>Best Plug-In Hybrid: </strong><a href="https://www.tomsguide.com/vehicle-tech/evs/i-drove-the-kia-niro-plug-in-hybrid-for-a-week-and-its-a-phev-that-most-people-can-afford#section-2024-kia-niro-phev-sx-touring-specifications"><strong>Kia Niro PHEV</strong></a><strong></strong></li><li><strong>Best value: </strong><a href="https://www.tomsguide.com/vehicle-tech/evs/2025-chevrolet-equinox-ev-lt-pros-and-cons"><strong>Chevrolet Equinox EV</strong></a><strong></strong></li><li><strong>Best SUV: </strong><a href="https://www.tomsguide.com/vehicle-tech/evs/i-drove-a-honda-prologue-ev-for-a-week-and-its-the-most-underrated-electric-vehicle-ive-tested-this-year"><strong>Honda Prologue</strong></a><strong></strong></li><li><strong>Best Pickup Truck: </strong><a href="https://www.tomsguide.com/vehicle-tech/evs/i-drove-a-rivian-r1t-tri-for-a-week-heres-my-pros-and-cons"><strong>Rivian R1T</strong></a><strong></strong></li><li><strong>Most efficient: </strong><a href="https://www.tomsguide.com/vehicle-tech/evs/2025-lucid-air-touring-pros-and-cons"><strong>Lucid Air Pure</strong></a><strong></strong></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/vehicle-tech/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Automotive</em></a></p><h3 class="article-body__section" id="section-sleep"><span>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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="GrBmR47YpfyCFB8Aq2ZgaN" name="TG Awards 2025 Sleep LIST" alt="Tom's Guide Awards 2025 Sleep" src="https://cdn.mos.cms.futurecdn.net/GrBmR47YpfyCFB8Aq2ZgaN.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best mattress: </strong><a href="https://www.tomsguide.com/reviews/saatva-classic-mattress"><strong>Saatva Classic</strong></a><strong></strong></li><li><strong>Best mattress in a box: </strong><a href="https://www.tomsguide.com/reviews/dreamcloud-mattress"><strong>DreamCloud Classic</strong></a><strong></strong></li><li><strong>Best hybrid mattress: </strong><a href="https://www.tomsguide.com/reviews/saatva-classic-mattress"><strong>Saatva Classic</strong></a><strong></strong></li><li><strong>Best memory foam mattress: </strong><a href="https://www.tomsguide.com/wellness/mattresses/nectar-premier-memory-foam-mattress-review"><strong>Nectar Premier Memory Foam Mattress</strong></a><strong></strong></li><li><strong>Best mattress for side sleepers: </strong><a href="https://www.tomsguide.com/wellness/mattresses/helix-midnight-luxe-mattress-review-year"><strong>Helix Midnight Luxe</strong></a><strong></strong></li><li><strong>Best mattress for stomach sleepers: </strong><a href="https://www.tomsguide.com/mattresses/helix-dawn-review"><strong>Helix Dawn</strong></a><strong></strong></li><li><strong>Best mattress topper: </strong><a href="https://www.tomsguide.com/wellness/mattresses/tempur-pedic-tempur-adapt-cooling-mattress-topper"><strong>Tempur-Pedic Tempur-Adapt + Cooling Mattress Topper</strong></a><strong></strong></li><li><strong>Best pillow: </strong><a href="https://www.tomsguide.com/mattresses/pillows-bedding/coop-sleep-goods-original-adjustable-pillow-review"><strong>Coop Home Goods Adjustable Pillow</strong></a><strong></strong></li><li><strong>Best mattress protector: </strong><a href="https://www.tomsguide.com/wellness/mattresses/coop-home-goods-ultra-tech-waterproof-mattress-protector-review-year"><strong>Coop Home Goods Waterproof Mattress Protector</strong></a><strong></strong></li><li><strong>Best sunrise alarm clock: </strong><a href="https://www.tomsguide.com/wellness/sleep-tech/hatch-restore-3-sunrise-alarm-clock-review"><strong>Hatch Restore 3</strong></a><strong></strong></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/wellness/sleep/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Sleep</em></a></p><h3 class="article-body__section" id="section-homes"><span>Homes</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="8ATLnpYuw5cxr6TRQE7Go9" name="TG Awards 2025 Homes LIST" alt="Tom's Guide Awards 2025 Homes" src="https://cdn.mos.cms.futurecdn.net/8ATLnpYuw5cxr6TRQE7Go9.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li><strong>Best air fryer: </strong><a href="https://www.tomsguide.com/home/air-fryers/ninja-crispi-air-fryer-review"><strong>Ninja Crispi</strong></a><strong></strong></li><li><strong>Best blender: </strong><a href="https://www.tomsguide.com/home/home-appliances/vitamix-ascent-x2-blender-review"><strong>Vitamix Ascent Series X2</strong></a><strong></strong></li><li><strong>Best juicer: </strong><a href="https://www.tomsguide.com/home/home-appliances/nama-c2-cold-press-juicer-and-blender-review"><strong>Nama C2 Cold Press Blender & Juicer</strong></a><strong></strong></li><li><strong>Best stand mixer: </strong><a href="https://www.tomsguide.com/home/home-appliances/i-got-a-first-look-at-oonis-new-halo-pro-stand-mixer"><strong>Ooni Halo Pro</strong></a><strong></strong></li><li><strong>Best smart home device: </strong><a href="https://www.tomsguide.com/home/smart-home/echo-show-21-review"><strong>Amazon Echo Show 21</strong></a><strong></strong></li><li><strong>Best air purifier: </strong><a href="https://www.tomsguide.com/home/home-appliances/blueair-blue-signature-air-purifier-review"><strong>Blueair Blue Signature </strong></a><strong></strong></li><li><strong>Best coffee maker: </strong><a href="https://www.tomsguide.com/home/coffee-makers/fellow-aiden-coffee-maker-review"><strong>Fellow Aiden</strong></a><strong></strong></li><li><strong>Best espresso machine: </strong><a href="https://www.tomsguide.com/home/coffee-makers/i-spent-a-month-testing-the-delonghi-la-specialista-touch-and-its-an-instant-classic"><strong>De'Longhi La Specialista Touch</strong></a><strong></strong></li><li><strong>Best vacuum cleaner: </strong><a href="https://www.tomsguide.com/home/home-appliances/samsung-bespoke-jet-ai-ultra-vacuum-review"><strong>Samsung Bespoke Jet AI Ultra</strong></a><strong></strong></li><li><strong>Best robot vacuum cleaner: </strong><a href="https://www.tomsguide.com/home/home-appliances/roborock-saros-10r-review"><strong>Roborock Saros 10R</strong></a><strong></strong></li><li><strong>Best digital photo frame: </strong><a href="https://www.tomsguide.com/cameras-photography/aura-aspen-review"><strong>Aura Aspen</strong></a><strong></strong></li><li><strong>Best standing desk: </strong><a href="https://www.tomsguide.com/home/home-office/branch-four-leg-standing-desk-review"><strong>Branch Four Leg Standing Desk</strong></a><strong></strong></li><li><strong>Best office chair: </strong><a href="https://www.tomsguide.com/home/home-office/hinomi-x1-review"><strong>Hinomi X1</strong></a><strong></strong></li><li><strong>Best grill: </strong><a href="https://www.tomsguide.com/home/outdoors/weber-spirit-ep-425-gas-grill-review"><strong>Weber Spirit EP-425</strong></a><strong></strong></li><li><strong>Best cooler: </strong><a href="https://www.tomsguide.com/home/ninja-frostvault-cooler-review"><strong>Ninja FrostVault</strong></a><strong></strong></li></ul><p><em>Find out more about all the winners for the </em><a href="https://www.tomsguide.com/home/toms-guide-awards-2025"><em>Tom's Guide Awards 2025 for Homes</em></a></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Tom's Guide Awards 2025: The brands, innovations and products that excite us the most ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/toms-guide-hero-awards-2025</link>
                                                                            <description>
                            <![CDATA[ These are the Tom's Guide Awards 2025 winners in our Hero Awards category which covers the latest innovations, best design, impressive sustainability efforts and more. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LPD6QYginoRCtpvLt57xgL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/iBn5nWjEkgyazcxHPYF2hS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 02 Aug 2025 07:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tom&#039;s Guide Staff ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/6hCNi5TkwpnQYs6nUTtoPc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/iBn5nWjEkgyazcxHPYF2hS-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tom&#039;s Guide 2025 Hero Awards]]></media:description>                                                            <media:text><![CDATA[Tom&#039;s Guide 2025 Hero Awards]]></media:text>
                                <media:title type="plain"><![CDATA[Tom&#039;s Guide 2025 Hero Awards]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/iBn5nWjEkgyazcxHPYF2hS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>We’ve covered a wide range of products, devices and services across 12 different categories for this year’s Tom’s Guide Awards. However, we’ve saved the best for last and our Hero Awards recognize the best of the best from the latest innovations to cutting-edge design and impressive sustainability efforts.</p><p>The winners of this year’s Hero Awards stood out to our team here at Tom’s Guide for changing the course of the world of technology as a whole, breaking ground with new innovations and going the extra mile when it comes to making the devices we use everyday more sustainable. </p><p>Join us in celebrating the achievements of all of this year’s Hero Awards winners and the lasting impact these companies and their products will have on the future of technology.</p><h3 class="article-body__section" id="section-best-new-product"><span>Best new product</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="4uWGLzayo9vCcEKew5pH9K" name="Gemini Live" alt="Gemini Live" src="https://cdn.mos.cms.futurecdn.net/4uWGLzayo9vCcEKew5pH9K.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><h2 id="gemini-live">Gemini Live</h2><p>AI is everywhere these days, and Google’s Gemini is absolutely dominating the space right now. While the AI software has a lot of features to boast, <a href="https://www.tomsguide.com/ai/google-gemini/i-tested-gemini-live-for-24-hours-the-good-the-bad-and-the-weird"><strong>Gemini Live</strong></a> has quickly stood out as one of its best.</p><p>Google describes it as a more natural way to chat to Gemini. Open up the Gemini app and you can start a video chat with it, showing Gemini your surroundings and chatting away to the AI bot.</p><p>It’s not just video, share documents, images and files with Gemini and live chat with the bot as it identifies what it is looking at.</p><p>This feature has been advertised heavily by Samsung, and for good reason. It turns your smartphone into an all-knowing chatbot with eyes. It can translate menus, explain documents, teach you how to change a tire and identify what kind of laptop you have.</p><p>Sure, this kind of feature isn’t entirely unique, competitors like OpenAI have their own version, but Gemini stands out as the most intuitive, understanding context and situational awareness far better than anyone else.<br></p><h3 class="article-body__section" id="section-innovation-award"><span>Innovation award</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="sAUcsPsbAmH8AZpfQcwFYV" name="Asus ROG Flow Z13" alt="Asus ROG Flow Z13" src="https://cdn.mos.cms.futurecdn.net/sAUcsPsbAmH8AZpfQcwFYV.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><h2 id="asus-rog-flow-z13">Asus ROG Flow Z13</h2><p>The <a href="https://www.tomsguide.com/computing/laptops/gaming-laptops/asus-rog-flow-z13-2025-review"><strong>Asus ROG Flow Z13</strong></a> started its life this year in controversial fashion — being announced with no dedicated graphics card. Instead, you’re getting an AMD Ryzen AI Max APU with…integrated graphics? Asus promised me it was powerful, but I was suspicious.</p><p>Fast forward a few months later to launch, and I can safely confirm that Strix Halo is the real deal — I’m absolutely blown away by what this 2-in-1 can do in the gaming space. I’m talking about Cyberpunk 2077 with topped out settings at over 90 frames per second, and even Black Myth: Wukong at 92 FPS.</p><p>And all of this in what is <em>essentially </em>a tablet!? And a damn good looking one at that with a bright, colorful and buttery smooth 180Hz Mini-LED display, a slim and sleek design, and a battery life that frankly embarrasses other high performance laptops?</p><p>I’ve been waiting for this moment for years — where gaming notebooks can be ultraportable without compromising performance. And now, it’s happened.</p><h3 class="article-body__section" id="section-best-company-award"><span>Best company award</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="xLM37vfkFA49k8yatRjJSY" name="Anthropic--credit-VCG-Getty" alt="Anthropic" src="https://cdn.mos.cms.futurecdn.net/xLM37vfkFA49k8yatRjJSY.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images/VCG)</span></figcaption></figure><h2 id="anthropic">Anthropic</h2><p>Thanks to its mission-driven approach to building safe and trustworthy AI, <a href="https://www.tomsguide.com/ai/anthropic-is-putting-a-limit-on-a-claude-ai-feature-because-people-are-using-it-24-7"><strong>Anthropic</strong></a> deserves the award for Best Company. Founded in 2021 by a team of former OpenAI researchers, the company has quickly risen to prominence with its Claude AI models, most notably Claude Sonnet 4 and Claude Opus 4, which have surpassed competitors in productivity tasks like writing, summarization and even code generation, leading in SWE-Bench benchmarks. </p><p>With massive backing from Amazon and Google and $4 billion in revenue to show for it, Anthropic’s Claude is quickly becoming one of the most influential AI platforms in the industry.<br><br>But what really sets Anthropic apart is its focus on AI safety, transparency and model explainability, qualities that are increasingly critical as AI tools move into our daily lives.</p><p>In a fast-moving industry where hype often outpaces impact, Anthropic’s steady, safety-first strategy is earning real-world trust, and that’s why it’s our top pick. </p><h3 class="article-body__section" id="section-sustainability-in-tech"><span>Sustainability in tech</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="sANFmyRA8DzZ2yLJBahD5h" name="Framework Laptop 12 TG" alt="Framework Laptop 12" src="https://cdn.mos.cms.futurecdn.net/sANFmyRA8DzZ2yLJBahD5h.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><h2 id="framework-laptop-12">Framework Laptop 12</h2><p>I’ve been reviewing laptops for decades, and the <a href="https://www.tomsguide.com/computing/laptops/i-just-built-the-new-framework-laptop-12-and-this-upgrade-is-a-game-changer-heres-why"><strong>Framework Laptop 12</strong></a> is the most accessible, sustainable and upgradable 2-in-1 I’ve ever seen. </p><p>Sure, it can’t match the elegance and power of more expensive laptops, but the fact that you can crack it open and start swapping out parts yourself makes the Framework Laptop 12 the most sustainable laptop I’ve used all year. And since the cute, chunky 2-in-1 comes in five color schemes (including bubblegum and sage) it could be a huge hit with kids, students and families.</p><p>That’s great for sustainability because like all Framework laptops, the Framework Laptop 12 is designed to be easy to learn thanks to embedded QR codes inside the laptop which take you right to Framework’s step-by-step guides. If the Framework Laptop 12 proves popular with families and schools it could help a whole generation feel more comfortable modifying and tinkering with their devices, and that could be a huge win for the future of sustainability.</p><h3 class="article-body__section" id="section-best-product-design"><span>Best product design</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="bejYnsiPKn86LAmVG7XYsk" name="Galaxy Z Fold 7" alt="Samsung Galaxy Z Fold 7" src="https://cdn.mos.cms.futurecdn.net/bejYnsiPKn86LAmVG7XYsk.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><h2 id="samsung-galaxy-z-fold-7">Samsung Galaxy Z Fold 7</h2><p>This is it. Samsung has done what we didn’t think possible. Make a foldable phone that’s just as sleek as a regular slab smartphone.</p><p>The <a href="https://www.tomsguide.com/phones/samsung-galaxy-z-fold-7-review"><strong>Galaxy Z Fold 7</strong></a> is a revelation in design. Measuring 8.9 mm when folded and 4.2mm when unfolded, this device is only slightly thicker than the Galaxy S25 Ultra and even lighter.</p><p>This is thanks to a redesigned Armor FlexHinge with an enhanced water droplet design. As a result of this and other enhancements, the Z Fold 7 is 48% thinner than the original Galaxy Z Fold and 26% thinner than last year’s Fold 6.</p><p>Even with this huge leap in portability, the Z Fold 7 boasts an even larger 8-inch main display. Plus, there’s a new multi-rail structure that reduces the visibility of the crease. And there’s a bigger 6.5-inch screen up front, too.</p><p>Yes, Samsung ditched S Pen support to achieve this thinner design. And you don’t get dust resistance. But overall, the Galaxy Z Fold 7 is the best foldable I’ve ever held and used. And it’s easily the best designed gadget of the year.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Exclusive: I tested the motorized Tech Deck Shred n’ Blast Sk8board — and it could be the toy of the year ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/exclusive-i-tested-the-motorized-tech-deck-shred-n-blast-sk8board-and-it-could-be-the-toy-of-the-year</link>
                                                                            <description>
                            <![CDATA[ I went hands-on with the Tech Deck Shred n’ Blast Sk8board, a $24.99 motorized fingerboard toy that launches over six feet in the air and brings high-energy action to classic Tech Deck play. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pxfcASSKmzf3FaT45rw4r9</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6LoKaRfsr2fW4G4hg47ydF-1280-80.gif" type="image/gif" length="0"></enclosure>
                                                                        <pubDate>Tue, 15 Jul 2025 13:00:00 +0000</pubDate>                                                                                                                                <updated>Tue, 15 Jul 2025 13:04:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Kate Kozuch ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xAVUdx6Qtp3SzugnnfNYsL.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Kate Kozuch is a managing editor of social and video at Tom&#039;s Guide, where she&#039;s been with the team since 2019. She also reviews smartwatches, covers TVs, tests the latest audio products and dabbles in cooking appliances. Of course, that&#039;s not when she&#039;s working on building the &lt;a href=&quot;https://www.tomsguide.com/reference/smart-home-guide&quot;&gt;ultimate DIY smart home&lt;/a&gt;. She has conducted over 100 different product reviews across these categories, turning her findings into buying guides and face-offs. She also manages a number of gift guides on the site. Kate has a strong on-camera presence as well. She has appeared on Cheddar and Fox 5 NY to talk trending tech news. She is also regularly featured on the Tom&#039;s Guide YouTube channel, runs the &lt;a href=&quot;https://www.tiktok.com/@tomsguide?lang=en&quot;&gt;Tom&#039;s Guide TikTok account&lt;/a&gt; with over 350,000 followers, and features all the tech she&#039;s testing &lt;a href=&quot;https://www.instagram.com/katekozuch/&quot;&gt;on her Instagram&lt;/a&gt;. When she’s not filming tech videos, you can find her taking up a new sport, mastering the NYT Crossword or channeling her inner celebrity chef. Speaking of, be sure to ask her about the time Guy Fieri made her a margarita at CES, or when her video of Martha Stewart drinking a margarita went mega-viral. Clearly, Kate has a thing for culinary icons and margaritas.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/gif" url="https://cdn.mos.cms.futurecdn.net/6LoKaRfsr2fW4G4hg47ydF-1280-80.gif">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tech Deck Shred n’ Blast Skateboard]]></media:description>                                                            <media:text><![CDATA[Tech Deck Shred n’ Blast Skateboard]]></media:text>
                                <media:title type="plain"><![CDATA[Tech Deck Shred n’ Blast Skateboard]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6LoKaRfsr2fW4G4hg47ydF-1280-80.gif" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Spin Master’s Tech Deck fingerboards have always been about tiny tricks, flicks, and setups on your desk or kitchen table. But the new Tech Deck Shred n’ Blast Sk8board takes a pretty big jump away from tradition, and I couldn't mean that any more literally.</p><p>I got early access to the Tech Deck Shred n’ Blast Sk8board, a new three-piece, stunt-style set that swaps out manual manipulation for motorized chaos. <a href="https://www.amazon.com/dp/B0DSCG3FRQ" target="_blank" rel="nofollow">Available on Amazon for $24.99 as of July 15</a>, this is unlike anything I’ve seen in the 27 years of Tech Deck before. </p><p>You can check out the Tech Deck Shred n’ Blast Sk8board in action in the TikTok video embedded below, or you can read on further to see what you get in the box and why this is one of the best toys I’ve checked out this year.</p>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@tomsguide/video/7527293287221202206" data-video-id="7527293287221202206" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@tomsguide" href="https://www.tiktok.com/@tomsguide">@tomsguide</a>                            <p></p><a target="_blank" title="♬ 90s Boom Bap Hip Hop - RockEagle" href="https://www.tiktok.com/music/90s-Boom-Bap-Hip-Hop-7378250999776086027">♬ 90s Boom Bap Hip Hop - RockEagle</a></section>                    </blockquote></div>                <h3 class="article-body__section" id="section-tech-deck-shred-n-blast-sk8board-what-you-get-in-the-box"><span>Tech Deck Shred n’ Blast Sk8board: What you get in the box</span></h3><p>The Shred n’ Blast set comes with three components: a trick stick used to charge up the board’s spin, a Tech Deck character attached to the motorized board that kind of looks like a Onewheel, and a one-foot-by-one-foot cardboard ramp tagged in graffiti-inspired art. </p><div class="product"><a data-dimension112="a95df5f0-6888-48c2-b97d-2cea4f2de63e" data-action="Deal Block" data-label="The Shred n’ Blast Sk8board zips, soars, bounces and more. It's available at Amazon now and suited for ages 6 and up." data-dimension48="The Shred n’ Blast Sk8board zips, soars, bounces and more. It's available at Amazon now and suited for ages 6 and up." data-dimension25="$24.99" href="https://www.amazon.com/dp/B0DSCG3FRQ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="797nm2Swhrw6sehHE6GTFH" name="Tech Deck_Shred n' Blast Sk8board_PKG 01" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/797nm2Swhrw6sehHE6GTFH.jpg" mos="" align="middle" fullscreen="" width="3000" height="3000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Shred n’ Blast Sk8board zips, soars, bounces and more. It's available at Amazon now and suited for ages 6 and up.<a class="view-deal button" href="https://www.amazon.com/dp/B0DSCG3FRQ" target="_blank" rel="nofollow" data-dimension112="a95df5f0-6888-48c2-b97d-2cea4f2de63e" data-action="Deal Block" data-label="The Shred n’ Blast Sk8board zips, soars, bounces and more. It's available at Amazon now and suited for ages 6 and up." data-dimension48="The Shred n’ Blast Sk8board zips, soars, bounces and more. It's available at Amazon now and suited for ages 6 and up." data-dimension25="$24.99">View Deal</a></p></div><p>This set is aimed at kids 6 and up, the materials seem selected for that audience interested in more action-driven play. The ramp is surprisingly sturdy despite being cardboard, and the rider being made of foam means it’s extremely crash-friendly. </p><p>What you don’t get in the box is the trick stick’s required four AA batteries. You’ll need to raid the remote drawer and find a Phillips head screwdriver before you get shredding.</p><h3 class="article-body__section" id="section-tech-deck-shred-n-blast-sk8board-how-it-works"><span>Tech Deck Shred n’ Blast Sk8board: How it works</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XB6hzKK7RqLCx6kq5EyiLG" name="IMG_4250.JPG" alt="Tech Deck" src="https://cdn.mos.cms.futurecdn.net/XB6hzKK7RqLCx6kq5EyiLG.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Once powered up, the trick stick connects magnetically to the side of the board in the center of the wheel. Revving it is as simple as holding down the trigger.</p><p>After a few seconds, the wheels spin progressively faster the longer you hold down, reaching up to 8,000 RPMs. Aim at the ramp, release the trigger, and watch it fly.</p><p>I decided to test it on my actual deck outside, which felt like the right move given the projectile nature of this Tech Deck. And let me tell you, the board <em>absolutely</em> launches. I managed to get it to clear over six feet with the ramp, going airborne over my deck’s railing, some patio chairs, and even my neighbor’s dog at one point. </p><p>When it lands, it usually bounces around in all directions for extra trick points. I love how totally unpredictable and playfully chaotic it is, a departure from the technical skills needed to operate the brand’s famous fingerboards. I couldn’t help but chuckle as my skater flailed around my backyard.</p><p>The Tech Deck Shred n’ Blast Sk8board is more about flying and crashing and ideally, finding creative ramps whether they be at home, at the playground, or at an actual skate park.</p><h3 class="article-body__section" id="section-tech-deck-shred-n-blast-sk8board-is-it-worth-it"><span>Tech Deck Shred n’ Blast Sk8board: Is it worth it?</span></h3><p>At $24.99, the Tech Deck Shred n’ Blast Sk8board soars in that sweet spot of being affordable but not throwaway. It’s a solid gift idea for kids who love high-energy motorized toys, or even for older Tech Deck fans willing to explore something different from the usual tabletop play.</p><p>It officially launches July 15 at Amazon, with availability expanding to Target in August and Walmart in October 2025. If you’re thinking of grabbing one, just make sure you’ve got batteries ready. A patch of grass nearby for the crash landings wouldn’t hurt, either.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ This power bank charged my partner’s phone three times and saved her on vacation — and it’s currently 27% off for Prime Day ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/this-power-bank-charged-my-partners-phone-three-times-and-saved-her-on-vacation-and-its-currently-27-percent-off-for-prime-day</link>
                                                                            <description>
                            <![CDATA[ The INIU 10,000mAh power bank can charge an iPhone 3.6 times and AirPods Pro 13.2 times. Currently, you can get it for just $15. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6niaHXPdhcKDTTF95sQ9yC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/KGHV5MjpDow6ruaaFwmY7G-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 09 Jul 2025 17:07:30 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ nikita.achanta@futurenet.com (Nikita Achanta) ]]></author>                    <dc:creator><![CDATA[ Nikita Achanta ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oXuvixDz99SbZp9z8Uoor3.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nikita is a Staff Writer on the Reviews team at Tom&#039;s Guide, and she&#039;s always on the lookout for the latest tech. She is a lifelong gaming and photography enthusiast, especially interested in wildlife and landscape photography. Having worked as a Sub Editor and Writer for Canon EMEA, she’s a bit of a grammar nerd (and a supporter of the Oxford comma), and has also interviewed photographers from all over the world and working in different genres. A holder of two master’s degrees, the most recent one being in Magazine Journalism from Cardiff University, Nikita’s work has appeared in several publications such as Motor Sport Magazine, NME, Marriott Bonvoy, The Independent, and Metro. Her favorite tech includes the PS5, the DJI Air 3S, and her Google Pixel 7 Pro. She&#039;s also a licensed drone pilot and instant cameras expert so you&#039;ll find her testing these almost every week.&lt;/p&gt;&lt;p&gt;In her downtime, Nikita can usually be found sinking hours into RPGs on her PS5, flying a drone, out on a walk with a camera in hand, at a concert, or watching F1 — but mostly shouting at the screen when her favorite driver spins out of a race.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/KGHV5MjpDow6ruaaFwmY7G-1280-80.jpg">
                                                            <media:credit><![CDATA[INIU / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[An INIU B41 portable power bank]]></media:description>                                                            <media:text><![CDATA[An INIU B41 portable power bank]]></media:text>
                                <media:title type="plain"><![CDATA[An INIU B41 portable power bank]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/KGHV5MjpDow6ruaaFwmY7G-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you're out and about or you're traveling, a portable power bank is a must-have, and there's no better time to buy one than during this year's <a href="https://www.tomsguide.com/live/news/prime-day-deals-live-tvs-apparel-gaming">Amazon Prime Day sales</a>. Sure, there are some discounts on power banks from Belkin and Anker, but I've found a deal on a brand you (probably) haven't heard of.</p><p>I'm talking about the <a href="https://www.amazon.com/dp/B07CZDXDG8/" target="_blank" rel="nofollow">INIU B41, which is currently available for just $15 at Amazon</a>, down from its retail price of $21. For such an invaluable piece of tech, this is an absolute steal — and my partner has been using it on her vacation for the past 10 days, and she says it has saved her on multiple occasions already.</p><div class="product"><a data-dimension112="b1f23035-82b1-427a-b2ed-480bee27fbb9" data-action="Deal Block" data-label="The market's thinnest 10,000mAh power bank, the INIU B41, can charge an iPhone 8 3.6 times and AirPods Pro 13.2 times. Unlike most other power banks, it features a USB-C port on both the input and output. 3A fast charging also fuels most smartphones up to 78% within an hour!" data-dimension48="The market's thinnest 10,000mAh power bank, the INIU B41, can charge an iPhone 8 3.6 times and AirPods Pro 13.2 times. Unlike most other power banks, it features a USB-C port on both the input and output. 3A fast charging also fuels most smartphones up to 78% within an hour!" data-dimension25="$15" href="https://www.amazon.com/dp/B07CZDXDG8/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1001px;"><p class="vanilla-image-block" style="padding-top:123.18%;"><img id="EJHE6PGQybhyVKArKGDS2V" name="INIU-B41-deal" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/EJHE6PGQybhyVKArKGDS2V.jpg" mos="" align="middle" fullscreen="" width="1001" height="1233" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The market's thinnest 10,000mAh power bank, the INIU B41, can charge an iPhone 8 3.6 times and AirPods Pro 13.2 times. Unlike most other power banks, it features a USB-C port on both the input and output. 3A fast charging also fuels most smartphones up to 78% within an hour!<a class="view-deal button" href="https://www.amazon.com/dp/B07CZDXDG8/" target="_blank" rel="nofollow" data-dimension112="b1f23035-82b1-427a-b2ed-480bee27fbb9" data-action="Deal Block" data-label="The market's thinnest 10,000mAh power bank, the INIU B41, can charge an iPhone 8 3.6 times and AirPods Pro 13.2 times. Unlike most other power banks, it features a USB-C port on both the input and output. 3A fast charging also fuels most smartphones up to 78% within an hour!" data-dimension48="The market's thinnest 10,000mAh power bank, the INIU B41, can charge an iPhone 8 3.6 times and AirPods Pro 13.2 times. Unlike most other power banks, it features a USB-C port on both the input and output. 3A fast charging also fuels most smartphones up to 78% within an hour!" data-dimension25="$15">View Deal</a></p></div><p>INIU says the B41 is the world's slimmest power bank, and it sure is <em>thin</em>, measuring just 5.2 x 2.7 x 0.5 inches, so it's highly pocketable and won't take up space in your backpack. But its prowess lies in its ability to charge devices over and over and over again. My partner managed to charge her <a href="https://www.tomsguide.com/phones/google-pixel-phones/google-pixel-9-review">Google Pixel 9</a> three times and her <a href="https://www.tomsguide.com/audio/earbuds/bose-quietcomfort-earbuds-2024-review">Bose QuietComfort</a> buds once before the power bank died. Yep, <em>that </em>powerful.</p><p>10,000mAh of power and 3A fast charging also means that this power bank can provide lots of juice when you're in a hurry. INIU says that the B41 can fuel most smartphones up to 78% within an hour, perfect for when you have multiple devices to charge and are short on time.</p><p>Now is the perfect time to save big on the <a href="https://www.amazon.com/dp/B07CZDXDG8/" target="_blank" rel="nofollow">INIU B41, which is 27% off at Amazon</a>. I wouldn't pass on this deal if I were you! Don't forget to tune into our <a href="https://www.tomsguide.com/live/news/prime-day-deals-live-tvs-apparel-gaming">Amazon Prime Day live blog</a> as we bring you the latest and greatest tech deals, and be sure to check out <a href="https://www.tomsguide.com/sales-events/heres-all-the-stuff-you-can-get-free-this-prime-day">all the freebies</a> you can secure.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've kept iPhones for 5 years and Nutribullets for 8 — here's how I nurture my tech and stretch its lifespan ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/ive-kept-iphones-for-5-years-and-nutribullets-for-8-heres-how-i-nurture-my-tech-and-stretch-its-lifespan</link>
                                                                            <description>
                            <![CDATA[ I'm very anti-spending money on replacing broken tech, so I've compiled my three top tips for ensuring you don't need to replace your gadgets often. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">vCCMwigh27riCvpU6zzfqD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/JAXork75g9NXhbiWXanqjW-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 19 Jun 2025 21:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ erin.bashford@futurenet.com (Erin Bashford) ]]></author>                    <dc:creator><![CDATA[ Erin Bashford ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/rLvJvJVZx43hEzSsJy3BpL.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Erin Bashford is a reviews writer at Tom’s Guide. She has a Master’s in Broadcast and Digital Journalism from the University of East Anglia and 7 years of experience reviewing music and events for various publications. She has edited publications such as Outline Magazine’s Guide to Norwich, and she has written for a number of music magazines and websites such as Clash Magazine, Outline Magazine and Dork Magazine, making her desperate to find the best audio gear. &lt;/p&gt;&lt;p&gt;Alongside this she has created video reports for BBC News and produced podcasts and radio broadcasts about everything from music to ghost stories. As an ex-barista, Erin is passionate about coffee tech. She also loves finding the best cooking hacks and kitchen appliances, including her beloved Instant Pot. &lt;/p&gt;&lt;p&gt;In her spare time, you can find her reading, practising yoga, hiking, writing fantasy fiction, or stressing over todays’ NYT Games.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/JAXork75g9NXhbiWXanqjW-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Person cleaning an iPhone with a cloth]]></media:description>                                                            <media:text><![CDATA[Person cleaning an iPhone with a cloth]]></media:text>
                                <media:title type="plain"><![CDATA[Person cleaning an iPhone with a cloth]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/JAXork75g9NXhbiWXanqjW-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Yes, it's true. Tech is expensive and I am poor. Luckily, I've been able to keep iPhones going for over 5 years (multiple times!), Nutribullets for 8 years, and I'm into my third year with my beloved MacBook Pro (and it runs just as well today as it did when I unboxed it). </p><p>So how do I do it? Well, I follow the guidelines set out by the manufacturers — I don't push my gadgets to the limits and I respect their desire to rest. Secondly, I ensure I future-proof my gear by getting the best specs for my personal requirements, which means I don't have to upgrade very often. </p><p>And the most important one of all? I take care of my stuff. I clean it and store it properly. If you follow my tips, I'm sure you'll be able to keep tech going for as long as possible. </p><h3 class="article-body__section" id="section-tech-tip-1-i-follow-the-user-manual"><span>Tech tip #1: I follow the user manual</span></h3><p>If a phone's instructions say "don't submerge in water", then don't submerge your phone in water. </p><p>All jokes aside, this is actually a really important point. It's <em>the</em> most important point in this article. Nutribullet advises against blending dry ingredients as it can damage the blades.</p><p>More often than not, home appliances like coffee machines and air fryers specify "suitable for private domestic use only." Products like these are only intended to be used a few times a day. </p><p>Think of it like this: if a coffee machine is used thirty times a day for a year, that's almost 11,000 coffees. However, if a coffee machine is used twice a day for a year, that's only 730 coffees, meaning it would take 15 years to make the same amount of beverages. </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="dFWebvueYgXZXJPfDPYZNG" name="DeLonghi_Rivelia_ 10.JPG" alt="the de'longhi rivelia automatic superautomatic coffee machine in sage green with a bright LED screen, two interchangeable bean hoppers, an automatic milk frother, and a huge range of coffee recipes" src="https://cdn.mos.cms.futurecdn.net/dFWebvueYgXZXJPfDPYZNG.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" 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>As a result, I don't expect my tech to do more than it promises. </p><p>My <a href="https://www.tomsguide.com/reviews/iphone-11">iPhone 11</a> lasted 5 years before I upgraded. I didn't even <em>need</em> to upgrade (it still worked perfectly fine). I upgraded to my current phone because I'd just sold my car and I had a bit of spare cash (for the first time ever). </p><p>Why did my iPhone last so long? I don't overuse it. My screen time is maximum 4 hours a day and I tend not to use my phone for hours on cellular. </p><p>However, if you use your phone for work, you obviously won't have this luxury. I recommend following the phone manufacturer's advice in this case: <a href="https://www.apple.com/batteries/maximizing-performance/" target="_blank">Apple</a>, for instance, recommends updating software often and using low power mode. This advice may change based on manufacturer. </p><div class="product"><a data-dimension112="a720d127-b35b-4e8f-ad26-15aac7e13d15" data-action="Deal Block" data-label="Nutribullet 900W" data-dimension48="Nutribullet 900W" data-dimension25="$64" href="https://www.amazon.com/Nutribullet-Superfood-Nutrition-Extractor-NBR-0601/dp/B07CTBHQZK/ref" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1334px;"><p class="vanilla-image-block" style="padding-top:80.21%;"><img id="2TQZUzFzkb5ujfXxz5tfcG" name="Nutribullet Blender 600 Series" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/2TQZUzFzkb5ujfXxz5tfcG.png" mos="" align="middle" fullscreen="" width="1334" height="1070" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This is the Nutribullet I've had since 2016. It's still going strong today because I look after it. I follow all Nutribullet's instructions, I clean it well, and I store the blades properly. Now, I would recommend getting the <a href="https://www.tomsguide.com/home/home-appliances/nutribullet-pro-900W-blender-review" data-dimension112="a720d127-b35b-4e8f-ad26-15aac7e13d15" data-action="Deal Block" data-label="Nutribullet 900W" data-dimension48="Nutribullet 900W" data-dimension25="$64">Nutribullet 900W </a>to last even longer. <a class="view-deal button" href="https://www.amazon.com/Nutribullet-Superfood-Nutrition-Extractor-NBR-0601/dp/B07CTBHQZK/ref" target="_blank" rel="nofollow" data-dimension112="a720d127-b35b-4e8f-ad26-15aac7e13d15" data-action="Deal Block" data-label="Nutribullet 900W" data-dimension48="Nutribullet 900W" data-dimension25="$64">View Deal</a></p></div><h3 class="article-body__section" id="section-tech-tip-2-i-get-the-product-with-the-specs-i-need"><span>Tech tip #2: I get the product with the specs I need</span></h3><p>To illustrate this point, I'm going to take you back to 2017. I needed a new MacBook, seeing as I was at college and taking my incredibly heavy laptop into school was too laborious and gave me permanent backache. </p><p>I was also a student, so I wasn't exactly rolling in cash. I went to the Apple Store and bought the cheapest MacBook there — it cost me about £900 ($1,200 roughly). It also had a 128GB SSD and just 8GB of RAM. </p><p>Did this MacBook last me a long time? Yes and no. I ended up using this laptop until 2022 when it quite literally died. It only worked while plugged in and if I tried to run more than one app at once it sounded like a jet engine. I also had to have an external hard drive plugged in at all times to access my files. </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="YbLDQnwRVXMQGdWsYTdPbS" name="MacBook Air M1 review Audio.jpg" alt="Apple MacBook Air M1 (late 2020) review" src="https://cdn.mos.cms.futurecdn.net/YbLDQnwRVXMQGdWsYTdPbS.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><div><blockquote><p>Just because something is expensive doesn't mean it'll last a long time. It's about evaluating what you need for the future.</p></blockquote></div><p>So in 2022, when I finally had scrounged enough money to upgrade, I got the top-of-the-range model. I upgraded from an M1 chip to an M1 Max, upgraded to 1TB of storage, and upgraded the RAM. </p><p>And now? Three years later, my MacBook Pro still runs like the day I unboxed it. It runs games, video editing software, and other demanding apps without breaking a sweat. </p><p>So I would recommend getting the top end product (if you can afford it, of course). In other cases, this would look like getting a (highly-rated) $800 espresso machine instead of an "it'll do" $200 one. If you don't need to replace something as often, you'll save money in the long run. </p><p>Just because something is expensive, though, doesn't mean it'll last a long time. It's about evaluating what <em>you</em> need for the future. I learned from my 2017 mistake and I didn't impulsively buy my new MacBook. I consolidated all the information available to me, researched my specs, and made the purchase only once I was 100% certain. </p><h3 class="article-body__section" id="section-tech-tip-3-i-maintain-my-products"><span>Tech tip #3: I maintain my products</span></h3><p>I know this one seems obvious, but it's actually really important. Maintenance encompasses loads of stuff: cleaning, storing in the appropriate place and replacing faulty parts. </p><p>For example, if your screen cracks, you should probably go and get a replacement before the crack gets worse. Similarly, if you throw your headphones on the floor instead of keeping them in the case, they probably won't last for very long. </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="7HSnSozDozSYPmqHztFBHh" name="Bose_Smart_soundbar_ 10.JPG" alt="the black bose smart soundbar 2024 with remote, 2 touch controls on top, and mesh covering on top" src="https://cdn.mos.cms.futurecdn.net/7HSnSozDozSYPmqHztFBHh.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" 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>My iPhone 11 screen never cracked because I had a really good phone case and screen protector. Now, with my iPhone 16, I have the <a href="https://www.tomsguide.com/phones/iphones/best-iphone-16-cases">best iPhone 16 phone case</a> to ensure my phone doesn't smash again. </p><p>This goes for everything I own: I empty and clean my <a href="https://www.tomsguide.com/home/home-appliances/dyson-gen5detect-vacuum-review">Dyson Gen5Detect</a> vacuum regularly, I descale my <a href="https://www.tomsguide.com/home/home-appliances/de-longhi-la-specialista-opera-espresso-machine-review">De'Longhi La Specialista Opera</a> every month (I live in a hard water area), and I dust my <a href="https://www.tomsguide.com/audio/soundbars/bose-smart-soundbar-review">Bose Smart Soundbar</a> every few days (this prevents particles getting in the speaker mechanism).  </p><p>If you follow these three tips, then you'll probably end up saving money in the long run. Your tech will last longer and, in time, save you $$$.</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/phones/i-was-a-samsung-engineer-heres-how-to-make-your-phone-last-as-long-as-possible-before-upgrading">I was a Samsung engineer — here's how to make your phone last as long as possible before upgrading</a></li><li><a href="https://www.tomsguide.com/phones/3-things-you-should-remember-if-youre-ditching-samsung-and-apple-phones">Ditching Samsung and Apple phones? Remember these 3 things</a></li><li><a href="https://www.tomsguide.com/home/outdoors/5-tech-travel-hacks-i-learned-after-2-months-backpacking-in-asia-dont-make-the-same-mistakes-as-me">5 tech travel hacks I learned after 2 months backpacking in Asia — don't make the same mistakes as me</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Going to a festival this summer? Pack these 5 gadgets to maximize the fun ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/going-to-a-festival-this-summer-pack-these-5-gadgets-to-maximize-the-fun</link>
                                                                            <description>
                            <![CDATA[ From earplugs and power banks to a good pair of walking shoes, here's what you need to pack for your next summer festival. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">8NGUSTugLU6qiRR7GGQPrF</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6MVJMVx6dQyYPpzuNEwiiC-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 18 Jun 2025 11:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ nikita.achanta@futurenet.com (Nikita Achanta) ]]></author>                    <dc:creator><![CDATA[ Nikita Achanta ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/oXuvixDz99SbZp9z8Uoor3.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Nikita is a Staff Writer on the Reviews team at Tom&#039;s Guide, and she&#039;s always on the lookout for the latest tech. She is a lifelong gaming and photography enthusiast, especially interested in wildlife and landscape photography. Having worked as a Sub Editor and Writer for Canon EMEA, she’s a bit of a grammar nerd (and a supporter of the Oxford comma), and has also interviewed photographers from all over the world and working in different genres. A holder of two master’s degrees, the most recent one being in Magazine Journalism from Cardiff University, Nikita’s work has appeared in several publications such as Motor Sport Magazine, NME, Marriott Bonvoy, The Independent, and Metro. Her favorite tech includes the PS5, the DJI Air 3S, and her Google Pixel 7 Pro. She&#039;s also a licensed drone pilot and instant cameras expert so you&#039;ll find her testing these almost every week.&lt;/p&gt;&lt;p&gt;In her downtime, Nikita can usually be found sinking hours into RPGs on her PS5, flying a drone, out on a walk with a camera in hand, at a concert, or watching F1 — but mostly shouting at the screen when her favorite driver spins out of a race.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/6MVJMVx6dQyYPpzuNEwiiC-1280-80.jpg">
                                                            <media:credit><![CDATA[Joe Maher/Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Night time view of Glastonbury Festival stage with crowd and fireworks]]></media:description>                                                            <media:text><![CDATA[Night time view of Glastonbury Festival stage with crowd and fireworks]]></media:text>
                                <media:title type="plain"><![CDATA[Night time view of Glastonbury Festival stage with crowd and fireworks]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6MVJMVx6dQyYPpzuNEwiiC-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I'm an avid concert and festival goer. Almost every month, I'm seeing either a big band at a stadium or an indie artist at an intimate venue. As someone who just danced her heart out to Charli XCX and will be headbanging to Linkin Park soon, I know the importance of carrying the right gadgets with you to a festival.</p><p>It's important not to underestimate the importance of a comfy pair of shoes, or a pair of earplugs that could save your hearing. Concerts and festivals aren't cheap, so you obviously want to make the most of them.</p><p>Whether you're headed to Glastonbury Festival in the U.K. or Lollapalooza in the U.S., I've rounded up the 5 gadgets and accessories you <em>need </em>to pack for your next summer festival. Let me take you through them all...</p><h3 class="article-body__section" id="section-power-bank"><span>Power bank</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="pEjYwN7tUyBt2RCm5W2XvC" name="Summer-festival-gadgets-2" alt="A UGREEN Nexoda 12,000mAh charger" src="https://cdn.mos.cms.futurecdn.net/pEjYwN7tUyBt2RCm5W2XvC.jpg" mos="" align="middle" fullscreen="" width="1510" height="850" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: UGREEN)</span></figcaption></figure><p>There is nothing worse than your smartphone or cameras running out of charge in the middle of an artist's set or when you're trying to coordinate a rendezvous location with your friends. A <a href="https://www.tomsguide.com/best-picks/best-portable-chargers">portable charger or power bank</a> is a necessity, whether you're at a three-day festival or a five-hour gig. Thankfully, there are many power banks available, catering to all budgets and needs.</p><div class="product"><a data-dimension112="8906494c-cf60-4dde-8e42-480bab22eccb" data-action="Deal Block" data-label="Sleek, lightweight and powerful: the UGREEN Nexode can charge an iPhone 15 to up to 60% in 30 minutes. Whatever you may need some emergency power for, from your smartphone all the way up to a MacBook Pro, this can deliver it." data-dimension48="Sleek, lightweight and powerful: the UGREEN Nexode can charge an iPhone 15 to up to 60% in 30 minutes. Whatever you may need some emergency power for, from your smartphone all the way up to a MacBook Pro, this can deliver it." data-dimension25="$49" href="https://www.amazon.com/UGREEN-12000mAh-Charging-Portable-Charger/dp/B0CXJ1F1M7/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:602px;"><p class="vanilla-image-block" style="padding-top:94.85%;"><img id="5fbTzeQKVNN4xdCDvgb9DP" name="Summer-festival-gadgets-deal-box-2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5fbTzeQKVNN4xdCDvgb9DP.png" mos="" align="middle" fullscreen="" width="602" height="571" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Sleek, lightweight and powerful: the UGREEN Nexode can charge an iPhone 15 to up to 60% in 30 minutes. Whatever you may need some emergency power for, from your smartphone all the way up to a MacBook Pro, this can deliver it.<a class="view-deal button" href="https://www.amazon.com/UGREEN-12000mAh-Charging-Portable-Charger/dp/B0CXJ1F1M7/" target="_blank" rel="nofollow" data-dimension112="8906494c-cf60-4dde-8e42-480bab22eccb" data-action="Deal Block" data-label="Sleek, lightweight and powerful: the UGREEN Nexode can charge an iPhone 15 to up to 60% in 30 minutes. Whatever you may need some emergency power for, from your smartphone all the way up to a MacBook Pro, this can deliver it." data-dimension48="Sleek, lightweight and powerful: the UGREEN Nexode can charge an iPhone 15 to up to 60% in 30 minutes. Whatever you may need some emergency power for, from your smartphone all the way up to a MacBook Pro, this can deliver it." data-dimension25="$49">View Deal</a></p></div><p>If you're on a budget, my pick is the UGREEN Nexode 12,000mAh 100W, available for <a href="https://www.amazon.com/UGREEN-12000mAh-Charging-Portable-Charger/dp/B0CXJ1F1M7/" target="_blank" rel="nofollow">$49</a> / <a href="https://www.amazon.co.uk/UGREEN-12000mAh-Charging-Portable-Compatible/dp/B0CXJ1F1M7/" target="_blank" rel="nofollow">£49 at Amazon</a>. This power bank is highly portable (as small as a standard Coke can) and its weight is negligible, so its easy to carry in your pocket or backpack.</p><p>At 12,000mAh and 100W, the Nexode can charge smartphones, cameras and even MacBooks. For reference, this power bank can charge an iPhone 15 to up to 60% in 30 minutes. This is a fantastic deal and, really, this power bank will definitely come in clutch.</p><h3 class="article-body__section" id="section-compact-camera"><span>Compact camera</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="fEGWGjbSdBhQCuW8xdo9Am" name="TG_DJI Osmo-Pocket-3_LIST.jpg" alt="DJI Osmo Pocket 3 held in hand" src="https://cdn.mos.cms.futurecdn.net/fEGWGjbSdBhQCuW8xdo9Am.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Who doesn't like recording their favorite artists performing their favorite songs? I do. I have countless videos stored on my Google Pixel 7 Pro of when I saw Roger Waters. Green Day, Paramore, etc. But <em>boy </em>does storage fill up quick when you're capturing footage and photos too. If you're a chronic snapper, I'd recommend grabbing a compact camera, and my recommendation is the <a href="https://www.tomsguide.com/reviews/dji-osmo-pocket-3">DJI Osmo Pocket 3</a>.</p><div class="product"><a data-dimension112="8e1873d5-a9b5-45cf-a5ef-03281f0b0f0a" data-action="Deal Block" data-label="The DJI Osmo Pocket 3 is a wonderful tool for vloggers and content creators, providing an affordable gimbal solution to give their video a professional look. It features awesome stabilization, strong low light performance and great battery life, all the while capturing stunning 4K footage." data-dimension48="The DJI Osmo Pocket 3 is a wonderful tool for vloggers and content creators, providing an affordable gimbal solution to give their video a professional look. It features awesome stabilization, strong low light performance and great battery life, all the while capturing stunning 4K footage." data-dimension25="$799" href="https://www.amazon.com/DJI-Stabilization-Rotatable-Touchscreen-Photography/dp/B0CG19QXWD/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:560px;"><p class="vanilla-image-block" style="padding-top:103.21%;"><img id="k2TTAhmN9A6tZiDzvApqCP" name="Summer-festival-gadgets-deal-box-3" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/k2TTAhmN9A6tZiDzvApqCP.png" mos="" align="middle" fullscreen="" width="560" height="578" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The DJI Osmo Pocket 3 is a wonderful tool for vloggers and content creators, providing an affordable gimbal solution to give their video a professional look. It features awesome stabilization, strong low light performance and great battery life, all the while capturing stunning 4K footage.<a class="view-deal button" href="https://www.amazon.com/DJI-Stabilization-Rotatable-Touchscreen-Photography/dp/B0CG19QXWD/" target="_blank" rel="nofollow" data-dimension112="8e1873d5-a9b5-45cf-a5ef-03281f0b0f0a" data-action="Deal Block" data-label="The DJI Osmo Pocket 3 is a wonderful tool for vloggers and content creators, providing an affordable gimbal solution to give their video a professional look. It features awesome stabilization, strong low light performance and great battery life, all the while capturing stunning 4K footage." data-dimension48="The DJI Osmo Pocket 3 is a wonderful tool for vloggers and content creators, providing an affordable gimbal solution to give their video a professional look. It features awesome stabilization, strong low light performance and great battery life, all the while capturing stunning 4K footage." data-dimension25="$799">View Deal</a></p></div><p>Well, it's not <em>really </em>a compact camera. It's a gimbal camera, which means you're getting stabilized footage, even when you're swaying to the beat or dancing.</p><p>The Osmo Pocket 3 captures stunning, stable 4K/60p video, even in dimly lit environments, it boasts long battery life (up to two hours), and it supports microSD cards up to 1TB — perfect for festivals.</p><p>You'd be surprised at the number of people I've seen carrying these nifty gadgets around at U.K. gigs and festivals! You can check out the sample footage in our <a href="https://www.tomsguide.com/reviews/dji-osmo-pocket-3">DJI Osmo Pocket 3 review</a>.</p><h3 class="article-body__section" id="section-instant-camera"><span>Instant camera</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="ZRzYG8hJkwzYLPoxgm5akj" name="Instax_Mini_12-Listing.jpg" alt="A mint green Fujifilm Instax mini 12 instant camera" src="https://cdn.mos.cms.futurecdn.net/ZRzYG8hJkwzYLPoxgm5akj.jpg" mos="" align="middle" fullscreen="" width="1510" height="850" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nikita Achanta / Future)</span></figcaption></figure><p>If you have space in your backpack, take an <a href="https://www.tomsguide.com/best-picks/best-instant-cameras">instant camera</a> with you.</p><p>There's nothing like snapping a pic in the moment and not worrying about whether it's perfect or not — and instant camera help you preserve memories by printing them on lovely film, often with a vintage aesthetic.</p><p>The <a href="https://www.tomsguide.com/cameras-photography/fujifilm-instax-mini-12-review">Fujifilm Instax mini 12</a> is the greatest instant camera for festivals, in my opinion.</p><div class="product"><a data-dimension112="bd83511c-18e8-4b0c-a9fa-3d2b3ca40137" data-action="Deal Block" data-label="The Fujifilm Instax mini 12 is an extremely easy-to-use instant camera that takes bright and detailed photos, even in low light. It comes with a handy app to scan and share your prints, a selfie mirror and a close-up mode for more versatile shots." data-dimension48="The Fujifilm Instax mini 12 is an extremely easy-to-use instant camera that takes bright and detailed photos, even in low light. It comes with a handy app to scan and share your prints, a selfie mirror and a close-up mode for more versatile shots." data-dimension25="$79" href="https://www.amazon.com/Fujifilm-Instax-Mini-Instant-Camera/dp/B0BWNZLQ69/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:599px;"><p class="vanilla-image-block" style="padding-top:98.50%;"><img id="FAVhTiAnYoiaXhpoVQXkCP" name="Summer-festival-gadgets-deal-box-4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FAVhTiAnYoiaXhpoVQXkCP.png" mos="" align="middle" fullscreen="" width="599" height="590" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Fujifilm Instax mini 12 is an extremely easy-to-use instant camera that takes bright and detailed photos, even in low light. It comes with a handy app to scan and share your prints, a selfie mirror and a close-up mode for more versatile shots.<a class="view-deal button" href="https://www.amazon.com/Fujifilm-Instax-Mini-Instant-Camera/dp/B0BWNZLQ69/" target="_blank" rel="nofollow" data-dimension112="bd83511c-18e8-4b0c-a9fa-3d2b3ca40137" data-action="Deal Block" data-label="The Fujifilm Instax mini 12 is an extremely easy-to-use instant camera that takes bright and detailed photos, even in low light. It comes with a handy app to scan and share your prints, a selfie mirror and a close-up mode for more versatile shots." data-dimension48="The Fujifilm Instax mini 12 is an extremely easy-to-use instant camera that takes bright and detailed photos, even in low light. It comes with a handy app to scan and share your prints, a selfie mirror and a close-up mode for more versatile shots." data-dimension25="$79">View Deal</a></p></div><p>Extremely easy to use with <em>very</em> limited buttons, the Instax mini 12 can be used by virtually anyone.</p><p>It takes lovely photos in bright conditions, and there's even a selfie mirror and close-up mode for when you want to take a picture with your friends or family. Photos develop quickly and there's a handy app for scanning prints in case you want to share them on social media.</p><p>There are many, <em>many </em>instant cameras to choose from but for those who want a no-frills one for festival snaps, the Instax mini 12 is the right fit.</p><h3 class="article-body__section" id="section-earplugs"><span>Earplugs</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="Gi95DBYUwLRFeAPgYRQEvC" name="Summer-festival-gadgets-1" alt="Black Loop Experience 2 earplugs" src="https://cdn.mos.cms.futurecdn.net/Gi95DBYUwLRFeAPgYRQEvC.jpg" mos="" align="middle" fullscreen="" width="1510" height="850" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Loop / Tom's Guide)</span></figcaption></figure><p>When you're in your early 20s, you don't necessarily realize the importance of earplugs, or the damage loud speakers at gigs and festivals can cause to your ears.</p><p>I didn't either, and it was only recently when, at an indie gig, I stood <em>right next to </em>a gargantuan speaker and felt my eardrums ringing. It was painful, and I decided to <em>finally </em>get myself a pair of Loop earplugs.</p><div class="product"><a data-dimension112="d704180c-0f53-4274-9653-49d7544f1c54" data-action="Deal Block" data-label="Perfect for festivals, concerts and even if you live next to a nightclub, the Loop Experience 2 earplugs filter noise by 17dB so music stays clear but at a safer volume. They're sleek and look great, and they'll stay put even when you're headbanging or dancing." data-dimension48="Perfect for festivals, concerts and even if you live next to a nightclub, the Loop Experience 2 earplugs filter noise by 17dB so music stays clear but at a safer volume. They're sleek and look great, and they'll stay put even when you're headbanging or dancing." data-dimension25="$38" href="https://www.amazon.com/Loop-Experience-Ear-Plugs-High-Fidelity/dp/B0D4DFQTMJ/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:615px;"><p class="vanilla-image-block" style="padding-top:96.42%;"><img id="UqDdYKdBgvddiFNk273mCP" name="Summer-festival-gadgets-deal-box-1" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/UqDdYKdBgvddiFNk273mCP.png" mos="" align="middle" fullscreen="" width="615" height="593" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Perfect for festivals, concerts and even if you live next to a nightclub, the Loop Experience 2 earplugs filter noise by 17dB so music stays clear but at a safer volume. They're sleek and look great, and they'll stay put even when you're headbanging or dancing.<a class="view-deal button" href="https://www.amazon.com/Loop-Experience-Ear-Plugs-High-Fidelity/dp/B0D4DFQTMJ/" target="_blank" rel="nofollow" data-dimension112="d704180c-0f53-4274-9653-49d7544f1c54" data-action="Deal Block" data-label="Perfect for festivals, concerts and even if you live next to a nightclub, the Loop Experience 2 earplugs filter noise by 17dB so music stays clear but at a safer volume. They're sleek and look great, and they'll stay put even when you're headbanging or dancing." data-dimension48="Perfect for festivals, concerts and even if you live next to a nightclub, the Loop Experience 2 earplugs filter noise by 17dB so music stays clear but at a safer volume. They're sleek and look great, and they'll stay put even when you're headbanging or dancing." data-dimension25="$38">View Deal</a></p></div><p>The Loop Experience 2 earplugs are well worth the investment. First of all, they filter noise by 17dB, ensuring music stays clear but at a safer volume. Also, they look <em>cool. </em>They're available in a few colorways — black, gold, rose gold and silver — so you can get the pair that goes best with your outfit.</p><p>They also come with four different eartip sizes for the perfect fit and serving people with small and big ears alike. They're built to stay in, so I know when I'm headbanging to Linkin Park's <em>The Emptiness Machine </em>in a week, I won't need to worry about losing them.</p><h3 class="article-body__section" id="section-walking-hiking-shoes"><span>Walking/hiking shoes</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="dePiZWJZudMyp764AkGTBQ" name="Keen_Zionic_shoes_ 10.JPG" alt="Green Keen Zionic Mid Waterproof hiking boots for women" src="https://cdn.mos.cms.futurecdn.net/dePiZWJZudMyp764AkGTBQ.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" 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>My mom always says that you can't enjoy yourself unless you're wearing comfortable shoes — and she is so right about that.</p><p>Many festivals need you to run from stage to stage so that you don't miss the next act, and many concerts involve you standing around and jumping for hours. You, of course, need a comfy pair of shoes. My pick? The <a href="https://www.tomsguide.com/wellness/fitness/keen-zionic-mid-waterproof-hiking-boots-review">Keen Zionic Mid Waterproofs</a>.</p><div class="product"><a data-dimension112="4208a2f5-158d-40db-a603-a213ad525922" data-action="Deal Block" data-label="The Keen Zionic Mid Waterproof are some of the most comfortable hiking boots I’ve ever used. Their cushioned insoles put a spring in your step while the grippy outsoles let you confidently navigate treacherous terrain. They’re quick to dry, too. Adding to their appeal is the lovely design that makes them great for everyday use." data-dimension48="The Keen Zionic Mid Waterproof are some of the most comfortable hiking boots I’ve ever used. Their cushioned insoles put a spring in your step while the grippy outsoles let you confidently navigate treacherous terrain. They’re quick to dry, too. Adding to their appeal is the lovely design that makes them great for everyday use." data-dimension25="$108" href="https://www.amazon.com/KEEN-Womens-Zionic-Waterproof-Terrain/dp/B0BPVPMPY6/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:575px;"><p class="vanilla-image-block" style="padding-top:77.39%;"><img id="4x8UTKDc7X5H6qkXyNRTCP" name="Summer-festival-gadgets-deal-box-5" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4x8UTKDc7X5H6qkXyNRTCP.jpg" mos="" align="middle" fullscreen="" width="575" height="445" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Keen Zionic Mid Waterproof are some of the most comfortable hiking boots I’ve ever used. Their cushioned insoles put a spring in your step while the grippy outsoles let you confidently navigate treacherous terrain. They’re quick to dry, too. Adding to their appeal is the lovely design that makes them great for everyday use.<a class="view-deal button" href="https://www.amazon.com/KEEN-Womens-Zionic-Waterproof-Terrain/dp/B0BPVPMPY6/" target="_blank" rel="nofollow" data-dimension112="4208a2f5-158d-40db-a603-a213ad525922" data-action="Deal Block" data-label="The Keen Zionic Mid Waterproof are some of the most comfortable hiking boots I’ve ever used. Their cushioned insoles put a spring in your step while the grippy outsoles let you confidently navigate treacherous terrain. They’re quick to dry, too. Adding to their appeal is the lovely design that makes them great for everyday use." data-dimension48="The Keen Zionic Mid Waterproof are some of the most comfortable hiking boots I’ve ever used. Their cushioned insoles put a spring in your step while the grippy outsoles let you confidently navigate treacherous terrain. They’re quick to dry, too. Adding to their appeal is the lovely design that makes them great for everyday use." data-dimension25="$108">View Deal</a></p></div><p><em>Technically</em>, these are hiking boots, but I think they look cool enough to pass as regular-day walking shoes — I would know, I've been wearing them to work regularly.</p><p>These waterproof boots dry quickly, and their 4mm directional lugs help you get a better grip in both wet and dry conditions. Come rain or shine, you'll be absolutely fine wearing these.</p><p>I wore the Zionic Mids to a Twenty One Pilots concert, and dancing around felt like walking on clouds because of how bouncy the soles are. Also, the strong traction meant that I didn't slip or skid even once on the wet/sticky floor.</p><p>Aaaand there you have it! Those are the top 5 gadgets and accessories you need to get before you head to a festival this summer. All of them are extremely important as you want to stay comfortable while capturing memories that may last a lifetime.</p><p>If nothing else, <em>at least </em>grab some earplugs —  trust me, you'll thank me in a few years when your hearing is still at 100%.</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/cameras-photography/dji-osmo-pocket-3-vs-iphone-5-reasons-this-gimbal-camera-wins">DJI Osmo Pocket 3 vs. iPhone — 5 reasons this gimbal camera wins</a></li><li><a href="https://www.tomsguide.com/audio/over-ear-headphones/the-marshall-monitor-iiis-are-my-favorite-headphones-and-theyre-currently-usd30-off">The Marshall Monitor IIIs are my favorite headphones — and they’re currently $30 off</a></li><li><a href="https://www.tomsguide.com/cameras-photography/mirrorless-cameras/i-think-the-new-fujifilm-x-e5-is-overrated-and-im-so-glad-i-bought-this-camera-instead">I think the new Fujifilm X-E5 is overrated — and I’m so glad I bought this camera instead</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I use this Anker power bank every day and it's now cheaper than ever — it can even charge my MacBook Air ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/i-use-this-anker-power-bank-every-day-and-its-now-cheaper-than-ever-it-can-even-charge-my-macbook-air</link>
                                                                            <description>
                            <![CDATA[ I've been using this Anker MagGo Power Bank with a huge 10,000mAh battery capacity to charge my devices while traveling, and t ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">6MvsXd5UoN4wNbGSDfqzW4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/xm8iEbao8t6qsoV3CypuN9-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Jun 2025 08:16:30 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Darragh Murphy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5QiaTSWf9FcVB7STxcdo4M.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Darragh is Tom’s Guide’s Computing Editor and is fascinated by all things bizarre in tech. This usually leads to assorted coverage varying from washing machines designed for earbuds to the wild world of laptops. Whether it&#039;s connecting Scar from The Lion King to two-factor authentication or turning his love for laptops into a fabricated rap battle from 8 Mile, he believes there’s always a quirky spin to be made.&lt;br&gt;&lt;br&gt;Darragh has previously been an Editor for Laptop Mag and a News Editor for Time Out Dubai, where he also headed the gaming and tech section. His work can be seen in Mashable, Android Police, Shortlist Dubai, Proton, theBit.nz, ReviewsFire and more. &lt;br&gt;&lt;br&gt;While laptops are his bread and butter, he’s also reviewed smartphones, monitors, speakers, docking stations and VPNs. He’s covered IFA, MWC Barcelona, the Consumer Electronics Show (&lt;a href=&quot;https://www.tomsguide.com/uk/tag/ces&quot; target=&quot;_blank&quot;&gt;CES&lt;/a&gt;) and more.&lt;br&gt;&lt;br&gt;When he&#039;s not checking out the latest devices and all things computing, he can be found going for dreaded long runs, watching terrible shark movies, and trying to find time to game.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/xm8iEbao8t6qsoV3CypuN9-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Anker MagGo Power Bank connected to MacBook Air next to each other on wooden table with orange wall in background ]]></media:description>                                                            <media:text><![CDATA[Anker MagGo Power Bank connected to MacBook Air next to each other on wooden table with orange wall in background ]]></media:text>
                                <media:title type="plain"><![CDATA[Anker MagGo Power Bank connected to MacBook Air next to each other on wooden table with orange wall in background ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/xm8iEbao8t6qsoV3CypuN9-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you've ever searched for the <a href="https://www.tomsguide.com/best-picks/best-portable-chargers">best power banks</a>, you'll have come across Anker. It's one of the best in the business when it comes to charging your devices, and that's exactly why I happen to carry around the Anker MagGo. </p><p>Well, one of the very many Anker dishes out, at least. There's a whole lineup of MagGo charging stations and stands, and yes, you'll even find some that make for the <a href="https://www.tomsguide.com/best-picks/best-wireless-chargers#section-the-best-wireless-charging-stand-for-travel">best wireless chargers</a>. But specifically, I'm all about the MagGo Power Bank with a 10,000mAh battery. </p><p>Wireless Qi2 charging with strong MagSafe support? Check. A smart display to show how long it takes for a device to charge? It's in the bag. A way to charge via a USB-C wired connection simultaneously? I think you know where I'm going with this — it's a damn good power bank. </p><div class="product"><a data-dimension112="62a75e55-d3ff-4aea-9800-293b43802282" data-action="Deal Block" data-label="The Anker MagGo Power Bank is a travel essential for any trip I take, as it can charge my iPhone, Apple Watch and even give my MacBook Air a little juice. Its 10,000mAh battery will completely charge an iPhone nearly twice over, and it's Qi2-certified to offer 15W wireless charging with strong MagSafe support. Oh, and it comes in a pocketable size with a handy smart display." data-dimension48="The Anker MagGo Power Bank is a travel essential for any trip I take, as it can charge my iPhone, Apple Watch and even give my MacBook Air a little juice. Its 10,000mAh battery will completely charge an iPhone nearly twice over, and it's Qi2-certified to offer 15W wireless charging with strong MagSafe support. Oh, and it comes in a pocketable size with a handy smart display." data-dimension25="$71" href="https://www.amazon.com/Anker-Certified-Ultra-Fast-MagSafe-Compatible-Portable/dp/B0CFDPQXN4" 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="HS5BtZdLGK7fEbL82UGwLR" name="Anker MagGo Power Bank deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HS5BtZdLGK7fEbL82UGwLR.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The Anker MagGo Power Bank is a travel essential for any trip I take, as it can charge my iPhone, Apple Watch and even give my MacBook Air a little juice. Its 10,000mAh battery will completely charge an iPhone nearly twice over, and it's Qi2-certified to offer 15W wireless charging with strong MagSafe support. Oh, and it comes in a pocketable size with a handy smart display.<a class="view-deal button" href="https://www.amazon.com/Anker-Certified-Ultra-Fast-MagSafe-Compatible-Portable/dp/B0CFDPQXN4" target="_blank" rel="nofollow" data-dimension112="62a75e55-d3ff-4aea-9800-293b43802282" data-action="Deal Block" data-label="The Anker MagGo Power Bank is a travel essential for any trip I take, as it can charge my iPhone, Apple Watch and even give my MacBook Air a little juice. Its 10,000mAh battery will completely charge an iPhone nearly twice over, and it's Qi2-certified to offer 15W wireless charging with strong MagSafe support. Oh, and it comes in a pocketable size with a handy smart display." data-dimension48="The Anker MagGo Power Bank is a travel essential for any trip I take, as it can charge my iPhone, Apple Watch and even give my MacBook Air a little juice. Its 10,000mAh battery will completely charge an iPhone nearly twice over, and it's Qi2-certified to offer 15W wireless charging with strong MagSafe support. Oh, and it comes in a pocketable size with a handy smart display." data-dimension25="$71">View Deal</a></p></div><h2 id="pocket-rocket">Pocket rocket</h2><p>Anyone who travels around with tech will know the pain of trying to find an outlet to charge their devices while they're jumping from an office to a café, from home to the airport (and possibly dropping by the pub for...one). That's why power banks can be incredibly handy; you can see why portable charging is very much in fashion. </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="wsyfg4jQnRtBBt89LUxUN9" name="Anker MagGo Power Bank" alt="Anker MagGo Power Bank attached to iPhone 16 with case both held in hand with bush in the background" src="https://cdn.mos.cms.futurecdn.net/wsyfg4jQnRtBBt89LUxUN9.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>But this Anker MagGo Power Bank has saved my <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-review">iPhone 16</a>, Apple Watch and even my <a href="https://www.tomsguide.com/computing/macbooks/macbook-air-13-inch-m3-review">MacBook Air M3</a> (to a point) from turning into bricks more often than not, as its welcome 10,000mAh battery capacity in its lightweight, pocketable design has become a boon everywhere I go. </p><p>It's not the cheapest power bank around, but after using it on a daily basis for nearly a year, I can say one thing's for sure: it's reliable. And would you look at that? The <a href="https://www.amazon.com/Anker-Certified-Ultra-Fast-MagSafe-Compatible-Portable/dp/B0CFDPQXN4" target="_blank" rel="nofollow">Anker MagGo Power Bank is now on sale at Amazon</a> for one of the cheapest prices I've seen. </p><p>I've been rocking a MagGo Power Bank in black, but it isn't immune to smudges. So, if you're hoping to add a splash of style to match the rest of the tech you have and have a cleaner appeal, the good news is it also comes in lime green, teal blue, pastel pink and a simple (but nice-looking) white. </p><h2 id="plenty-of-charge">Plenty of charge</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RrS3w4eFUDi8376eUCsoN9" name="Anker MagGo Power Bank" alt="Anker MagGo Power Bank on table with iPhone 16 showing Tom's Guide website attached" src="https://cdn.mos.cms.futurecdn.net/RrS3w4eFUDi8376eUCsoN9.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>So, the Anker MagGo Power Bank is rated to charge a MagSafe-supported iPhone (and a few Android phones that are at least Qi2 ready, like that <a href="https://www.tomsguide.com/phones/samsung-phones/galaxy-s25-review">Samsung Galaxy S25</a>) with 15W Qi2 wireless charging, and even more devices with 27W power through wired charging. In fact, it claims to charge an <a href="https://www.tomsguide.com/reviews/iphone-15-pro-max">iPhone 15 Pro Max</a> from 0% to 100% twice over. </p><p>For the most part, that's been right on the money since I've been using it. But there's nothing said about, say, a full-on laptop. These generally require more power than a smartphone, but that doesn't stop the MagGo from charging my MacBook Air when it's in dire need of juice.</p><p>I've used the power bank to charge the MacBook Air on public transport and even on flights abroad, and it's given me a bump of just under 50% of battery in the space of a couple of hours while I work away on the laptop. That's saved my skin from losing hours of work a couple of times. </p><p>Now, it won't completely charge the MacBook Air, and it takes <em>all</em> of its 10,000mAh capacity to give it the boost it needs. But for a device that I can easily slip into my pocket — and even better, the sleeve of a <a href="https://www.tomsguide.com/computing/i-traveled-500-miles-with-this-laptop-backpack-and-its-done-wonders-for-my-daily-commute">laptop backpack</a> — and weighs a measly 0.5 pounds, that's commendable effort. </p><h2 id="a-travel-essential">A travel essential</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="3t4vPLWgfzZdMFxvXxMCM9" name="Anker MagGo Power Bank" alt="Anker MagGo Power Bank held in hand with bush in the background" src="https://cdn.mos.cms.futurecdn.net/3t4vPLWgfzZdMFxvXxMCM9.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Power banks are simple devices: they're portable chargers that can power your tech on the go. But it's the little touches that set apart the good ones from great ones, and as you can tell, there are a few ways the Anker MagGo Power Bank falls into the latter. </p><p>But I'd also like to point out its simplistic design. Yes, its fancy smart display is handy for letting you know recharge times (sometimes it can be a tad off the mark), but what's even better? Its sturdy little pop-out stand. </p><p>Having a stand means being able to magnetically attach an iPhone to the power bank, turn it horizontally and catch up on the latest shows without having to awkwardly place a phone at a weird angle on a small table on a train or plane. Or worse, having to crank your head down as your phone lies flat on a surface. That also makes it great for <a href="https://www.tomsguide.com/news/ios-17-standby">StandBy mode</a>. </p><p>Anyway, if you're sick of charging your devices at random, hard-to-find outlets while traveling and want to give your tech a second chance at (battery) life, the Anker MagGo Power Bank with a 10,000mAh battery is a great shout (especially with its nifty discount). </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/tech/ive-been-using-this-3-in-1-wireless-charger-for-2-weeks-and-its-a-must-have-for-travel">I've been using this 3-in-1 wireless charger for 2 weeks — and it's a must-have for travel</a></li><li><a href="https://www.tomsguide.com/sales-events/my-favorite-power-bank-doubles-as-a-tire-inflator-and-its-70-percent-off-right-now">My favorite power bank doubles as a tire inflator — and it's 70% off right now</a></li><li><a href="https://www.tomsguide.com/computing/peripherals/this-robot-gan-charger-is-one-of-my-favorite-gadgets-of-2024-and-it-just-got-a-big-upgrade">This robot GaN charger is one of my favorite gadgets — and it just got a huge upgrade</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Tom’s Guide Awards 2025 nominations — Submit your products now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/toms-guide-awards-2025-nominations</link>
                                                                            <description>
                            <![CDATA[ The Tom's Guide Awards honor the best products in tech, home, fitness and more. Nominations are now open — here's how to enter. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">g6p7YmqRwF3gS7cqjPPtrC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/v7hNHTtHfGpq44z9Aq6yE7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 11 Jun 2025 16:00:25 +0000</pubDate>                                                                                                                                <updated>Fri, 13 Jun 2025 22:58:24 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ anthony.spadafora@futurenet.com (Anthony Spadafora) ]]></author>                    <dc:creator><![CDATA[ Anthony Spadafora ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/z73LEoj7FkUjNG85GcWHtH.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Anthony Spadafora is the managing editor for security and home office furniture at Tom’s Guide where he covers everything from data breaches and malware to password managers and the best way to cover your whole home or business with a strong Wi-Fi signal.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before joining the team, he spent three years covering cybersecurity and B2B tech for ITProPortal while living in South Korea. After moving back to the US. Anthony joined the TechRadar Pro team where he covered these topics along with VPNs, web hosting, online collaboration software and video conferencing for four years. Anthony also has his ears to the ground and is on the lookout for the next major cyberattack or data breach.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Based in Houston, Texas, Anthony also handles VPN testing for both Tom’s Guide and TechRadar. As someone who has worked from home exclusively since 2018, he has reviewed dozens of standing desks as well as office chairs and has taken a closer look at other essential remote working accessories. As part of these reviews, Anthony frequently builds intricate desk setups which is why he’s such a big advocate for cable management and keeping things organized. When he’s not writing, he can be found tinkering with PCs and game consoles, managing cables and making upgrades to his smart home.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/v7hNHTtHfGpq44z9Aq6yE7-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[The Tom&#039;s Guide Awards 2025 badge on a multicolored background]]></media:description>                                                            <media:text><![CDATA[The Tom&#039;s Guide Awards 2025 badge on a multicolored background]]></media:text>
                                <media:title type="plain"><![CDATA[The Tom&#039;s Guide Awards 2025 badge on a multicolored background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/v7hNHTtHfGpq44z9Aq6yE7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://future.swoogo.com/tomsguideawards2025">Tom’s Guide Awards</a> is back for its sixth year, and we’re celebrating the best-of-the-best products across a wide range of categories. From phones and laptops to home appliances and fitness gear, these awards are designed to highlight the very best devices and services for your money.</p><p>Our Hero awards recognize big-picture innovation, the best brand of the year, admirable efforts in diversity and sustainability and more. We’re excited to celebrate the people and companies that receive the highest honors. However, we also want to highlight products that provide excellent value since we understand that being able to find great tech for a bargain is important to many consumers.</p><p>Some new categories in 2025 include the best mirrorless camera, best drone and others related to photography. At the same time, we've expanded our dedicated AI award section this year to highlight all of the continued innovations in the growing space.</p><p>The awards are free to enter and will be judged by Tom’s Guide’s resident specialists, but we still need your help to create the ultimate shortlists. <a href="https://future.swoogo.com/tomsguideawards2025">Click here</a> to nominate your favorite products of the year.</p><h2 id="how-to-enter-the-tom-s-guide-awards">How to enter the Tom's Guide Awards</h2><p>Companies can enter <a href="https://future.swoogo.com/tomsguideawards2025">here</a> for the Tom’s Guide Awards, and submissions are free. We are taking nominations between now and June 30. We will announce all of the Tom’s Guide Awards 2025 winners the week of July 21.</p><h2 id="tom-s-guide-awards-categories">Tom's Guide Awards categories</h2><h2 id="hero-awards">Hero Awards</h2><ul><li><strong>Best New Product of 2025: </strong>The very top product judged by Tom’s Guide’s editors, which takes into consideration all of the major categories. Must be a product that’s new for 2025.</li><li><strong>Innovation Award: </strong>Honoring the company or person that has truly pushed the envelope with a particular product or product category. Who is rethinking how products and services work for users?</li><li><strong>Best Company Award:</strong> An award that recognizes the brand that has had the most impact over the past year through the quality of its products, the excitement around its launches and the good it is doing for the world.</li><li><strong>Diversity in Tech Award: </strong>This award celebrates the company or person who is helping to make the latest innovations as accessible as possible to the broadest possible audience, including underserved communities.</li><li><strong>Sustainability Award: </strong>What product or company made changes or launched initiatives to better our environment. Think: using recycled materials, cutting plastic out of packaging and more.</li><li><strong>Best Product Design of 2025: </strong>We appreciate aesthetics and smart design choices. Help us celebrate the product with the best design sensibilities.</li></ul><h2 id="phones">Phones</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="UMFiwGVCqTDiCum2ggShb8" name="best phones ai" alt="Google Pixel 9 XL, Galaxy S25 Ultra and iPhone 16 Pro in hand" src="https://cdn.mos.cms.futurecdn.net/UMFiwGVCqTDiCum2ggShb8.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><ul><li>Best phone</li><li>Best iPhone</li><li>Best Android phone</li><li>Best camera phone</li><li>Best gaming phone</li><li>Best foldable phone</li><li>Best phone design</li><li>Best phone battery life</li><li>Best budget phone</li></ul><h2 id="computing">Computing</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="2vs6VzL6oWVPdCDL8XBEi9" name="TG_Lenovo-Yoga-Slim-7x-15.jpg" alt="Lenovo Yoga Slim 7x" src="https://cdn.mos.cms.futurecdn.net/2vs6VzL6oWVPdCDL8XBEi9.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li>Best laptop</li><li>Best AI laptop</li><li>Best gaming laptop</li><li>Best 2-in-1 laptop</li><li>Best monitor</li><li>Best webcam</li><li>Best docking station</li><li>Best tablet</li><li>Best router</li><li>Best mesh router</li><li>Best antivirus</li><li>Best VPN</li></ul><h2 id="tv">TV</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="W8CCsrW4BhKoUtJford247" name="Samsung DU7200 LED TV-11" alt="A Samsung DU7200 LED TV on a side table" src="https://cdn.mos.cms.futurecdn.net/W8CCsrW4BhKoUtJford247.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li>Best TV</li><li>Best OLED TV</li><li>Best QLED TV</li><li>Best TV design</li><li>Best TV innovation</li><li>Best 8K TV</li><li>Best gaming TV</li><li>Best big-screen TV</li><li>Best projector</li></ul><h2 id="streaming">Streaming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="LYNYXmcZFfUkoU2AA3MVdT" name="Roku Streaming Stick Plus vs Google TV Streamer-1-LEDE" alt="Roku Streaming Stick Plus vs Google TV Streamer" src="https://cdn.mos.cms.futurecdn.net/LYNYXmcZFfUkoU2AA3MVdT.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li>Best streaming service</li><li>Best live TV streaming service</li><li>Best sports streaming service</li><li>Best free streaming service</li><li>Best streaming reality show</li><li>Best streaming original show (scripted)</li><li>Best streaming movie</li></ul><h2 id="audio">Audio</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EqLwiimJxmTAnfouHsqjxC" name="Sony WH-1000XM6--02" alt="Side view of black Sony WH-1000XM6 noise-cancelling headphones held outdoors in sunshine" src="https://cdn.mos.cms.futurecdn.net/EqLwiimJxmTAnfouHsqjxC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li>Best headphones</li><li>Best noise-cancelling headphones</li><li>Best noise-cancelling earbuds</li><li>Best wireless earbuds</li><li>Best audiophile headphones</li><li>Best soundbar</li><li>Best Bluetooth speaker</li></ul><h2 id="homes">Homes</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:1600px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4zmYgSdwuMMBzijdo2vJNH" name="Ninja Luxe Café Pro" alt="Ninja Luxe Café Pro being tested in a green and white kitchen" src="https://cdn.mos.cms.futurecdn.net/4zmYgSdwuMMBzijdo2vJNH.jpg" mos="" align="middle" fullscreen="" width="1600" height="900" 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><ul><li>Best air fryer</li><li>Best toaster oven</li><li>Best blender</li><li>Best food processor</li><li>Best juicer</li><li>Best smart home device</li><li>Best home security camera</li><li>Best air purifier</li><li>Best espresso machine</li><li>Best coffee maker</li><li>Best vacuum cleaner</li><li>Best digital photo frame</li><li>Best standing desk</li><li>Best office chair</li><li>Best grill</li></ul><h2 id="sleep">Sleep</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="r759kcheBNvGjW2ncdPdEB" name="HelixMidnightLuxe_129.JPG" alt="Woman wearing blue striped pajamas sleeping on a plush bed in a bedroom with a pastel blue wall" src="https://cdn.mos.cms.futurecdn.net/r759kcheBNvGjW2ncdPdEB.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" 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><ul><li>Best mattress</li><li>Best mattress in a box</li><li>Best hybrid mattress</li><li>Best memory foam mattress</li><li>Best organic mattress</li><li>Best mattress for side sleepers</li><li>Best mattress for stomach sleepers</li><li>Best mattress for back pain</li><li>Best mattress topper</li><li>Best pillow</li><li>Best mattress protector</li></ul><h2 id="ai">AI</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="PZzGSzpCWN7q8ExUsdiV78" name="chatgpt figure" alt="ChatGPT generated image" src="https://cdn.mos.cms.futurecdn.net/PZzGSzpCWN7q8ExUsdiV78.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: ChatGPT)</span></figcaption></figure><ul><li>Best AI chatbot</li><li>Best AI image generator</li><li>Best AI video generator</li><li>Best AI music generator</li><li>Best AI device</li><li>Best AI phone feature</li></ul><h2 id="active-life">Active Life</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="cmJZA3GJB7jTNo2pwGnmec" name="Garmin Fenix 8" alt="Garmin Fenix 8 Sleep" src="https://cdn.mos.cms.futurecdn.net/cmJZA3GJB7jTNo2pwGnmec.jpg" mos="" align="middle" fullscreen="" width="4032" height="2268" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><ul><li>Best smartwatch</li><li>Best fitness tracker</li><li>Best running watch</li><li>Best electric scooter</li><li>Best electric bike</li><li>Best running shoes</li><li>Best hiking boots</li><li>Best outerwear</li><li>Best yoga mat</li><li>Best workout app</li><li>Best adjustable dumbbell</li><li>Best workout headphones</li><li>Best massage guns</li></ul><h2 id="gaming">Gaming</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="RtbUJehPa6WdYDreRzc8J4" name="Victrix Pro BFG-4.jpg" alt="Playing Cyberpunk 2077 with the PDP Victrix Pro BFG controller" src="https://cdn.mos.cms.futurecdn.net/RtbUJehPa6WdYDreRzc8J4.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><ul><li>Best console</li><li>Best handheld gaming console</li><li>Best VR headset</li><li>Best gaming monitor</li><li>Best gaming keyboard</li><li>Best gaming mouse</li><li>Best gaming headset</li><li>Best gaming chair</li><li>Best game subscription service</li></ul><h2 id="photography">Photography</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="ZDUBhLWVMuksYJsyfFTeYf" name="Pentax_17_ 9.JPG" alt="A Pentax 17 half-frame film camera" src="https://cdn.mos.cms.futurecdn.net/ZDUBhLWVMuksYJsyfFTeYf.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" 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><ul><li>Best mirrorless camera</li><li>Best instant camera</li><li>Best film camera</li><li>Best drone</li><li>Best action camera</li><li>Best vlogging camera</li></ul><p><em>Final categories are subject to change</em></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 8 best Father's Day gifts 2025 — here's my top picks as a Dad ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/8-best-fathers-day-gifts-2025-heres-my-top-picks-as-a-dad</link>
                                                                            <description>
                            <![CDATA[ Whether your Dad is a gamer, golfer or something else, we've got the gifts that'll make his Father's Day one to remember. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KQz5bntTXhhLQgUNWcnKyD</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/nkkRLmxEzrjJp5y2dHZkUY-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 05 Jun 2025 11:20:02 +0000</pubDate>                                                                                                                                <updated>Fri, 06 Jun 2025 13:59:22 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Mark Spoonauer ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/wtAspSzVfcKLB4JEd39AMo.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Mark Spoonauer is the global editor in chief of Tom&#039;s Guide and has covered technology for over 20 years. He oversees the direction of Tom&#039;s Guide and leads a team of over 25 journalists to bring you our expert buying guides, reviews, news, how-to articles, deals and other coverage.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Mark has a passion for covering all things mobile, having reviewed dozens of smartphones and other gadgets. He enjoys testing the top mobile devices and putting them up against each other in our in-depth face-offs. He also works hand in hand with our editors and testing team to continually improve how we evaluate products.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Having led Tom&#039;s Guide since 2013, Mark has focused on growing the core tech coverage of the site while also expanding into new areas, such as entertainment, fitness and home, recruiting talented writers and editors to help our readers figure out what to buy and how to get the most out of the products and services they use every day.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Mark has spoken at key industry events and appears regularly on TV to discuss the latest trends, including &lt;a href=&quot;https://cheddar.com/media/pixel-watch-gets-a-release-date-at-google-i-o-2022&quot;&gt;Cheddar&lt;/a&gt;, Fox 5, &lt;a href=&quot;https://www.foxbusiness.com/technology/apple-march-event-5g-iphone&quot;&gt;Fox Business&lt;/a&gt; and other outlets. Mark was previously editor in chief of Laptop Mag, and his work has appeared in Wired, Popular Science and Inc. Follow him on Twitter at @mspoonauer.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/nkkRLmxEzrjJp5y2dHZkUY-1280-80.jpg">
                                                            <media:credit><![CDATA[Nintendo, Cube, Anker, Chamelo]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Nintendo Switch 2, Anker Solix Everfrost 2 cooler, Cube laser rangefinder and Chamelo Music Shield sunglasses ]]></media:description>                                                            <media:text><![CDATA[Nintendo Switch 2, Anker Solix Everfrost 2 cooler, Cube laser rangefinder and Chamelo Music Shield sunglasses ]]></media:text>
                                <media:title type="plain"><![CDATA[Nintendo Switch 2, Anker Solix Everfrost 2 cooler, Cube laser rangefinder and Chamelo Music Shield sunglasses ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/nkkRLmxEzrjJp5y2dHZkUY-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Father's Day is June 15, so time is running out to find the perfect gift. If your dad is into gadgets, you're in luck — we've rounded up some of the coolest tech gifts he’s sure to love.</p><p>I’m a Dad and a full-on tech nerd myself, and I handpicked several of these items to feature on TV for a Father’s Day segment.</p><p>Whether your Dad is into movies, video games, golf, or just loves a clever gadget, there’s something here that’ll hit the mark.</p><p>From the red-hot Nintendo Switch 2 to sunglasses that stream music and a golf rangefinder so advanced it feels like cheating, these gifts deliver serious wow factor.</p><p>Even better? Some of them are on sale, so you can make dad’s day without breaking the bank. Just don’t wait too long—these picks are popular, and shipping deadlines are coming up fast.</p><h2 id="rorry-m3-foldable-charger-and-power-bank">Rorry M3 Foldable Charger and Power Bank</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EwGkbyNTrkW2fYsXJsCE7n" name="RORRY-M3-Foldable-Charger-LEDE" alt="Rorry M3 Foldable Charger and Power Bank" src="https://cdn.mos.cms.futurecdn.net/EwGkbyNTrkW2fYsXJsCE7n.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Rorry)</span></figcaption></figure><p>If your Dad travels a lot, or is just always on the go, he'll love this MagSafe power bank. It packs a 10,000 mAh battery built in and can fully charge on <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-pro-review">iPhone 16 Pro</a> nearly twice</p><p>Even better, the 3-in-1 design lets you charge your AirPods and Apple Watch at the same time. And with support for Apple's <a href="https://www.tomsguide.com/news/ios-17-standby">StandBy mode</a>, it turns his iPhone into a sleek bedside alarm clock when docked.</p><div class="product"><a data-dimension112="0fd4e2dc-a3a4-4812-b223-0e3abfc6ab87" data-action="Deal Block" data-label="For the Apple-loving Dad, this charger will handle an Apple Watch, an iPhone and AirPods. To top it off, it even has a 10,000mAh battery built-in so he can charge all of his trusty gadgets even when there's no outlet. For the price, you can't beat the functionality it offers." data-dimension48="For the Apple-loving Dad, this charger will handle an Apple Watch, an iPhone and AirPods. To top it off, it even has a 10,000mAh battery built-in so he can charge all of his trusty gadgets even when there's no outlet. For the price, you can't beat the functionality it offers." data-dimension25="$43" href="https://rorry.com/products/m3-10000mah-3in1-foldable-wireless-power-bank" 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:100.00%;"><img id="ocmovomHywJESFrTM7hmff" name="Rorry 3-in-1 Portable 10000 mAh Charger deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ocmovomHywJESFrTM7hmff.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>For the Apple-loving Dad, this charger will handle an Apple Watch, an iPhone and AirPods. To top it off, it even has a 10,000mAh battery built-in so he can charge all of his trusty gadgets even when there's no outlet. For the price, you can't beat the functionality it offers.<a class="view-deal button" href="https://rorry.com/products/m3-10000mah-3in1-foldable-wireless-power-bank" target="_blank" rel="nofollow" data-dimension112="0fd4e2dc-a3a4-4812-b223-0e3abfc6ab87" data-action="Deal Block" data-label="For the Apple-loving Dad, this charger will handle an Apple Watch, an iPhone and AirPods. To top it off, it even has a 10,000mAh battery built-in so he can charge all of his trusty gadgets even when there's no outlet. For the price, you can't beat the functionality it offers." data-dimension48="For the Apple-loving Dad, this charger will handle an Apple Watch, an iPhone and AirPods. To top it off, it even has a 10,000mAh battery built-in so he can charge all of his trusty gadgets even when there's no outlet. For the price, you can't beat the functionality it offers." data-dimension25="$43">View Deal</a></p></div><h2 id="chamelo-music-shield">Chamelo Music Shield</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:476px;"><p class="vanilla-image-block" style="padding-top:100.84%;"><img id="GXrj9DLT8QRZ9FiwPbSTsR" name="chamelo music" alt="Chamelo Music Shield" src="https://cdn.mos.cms.futurecdn.net/GXrj9DLT8QRZ9FiwPbSTsR.gif" mos="" align="middle" fullscreen="" width="476" height="480" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Chamelo)</span></figcaption></figure><p>Dads who spend a lot of time outdoors, especially those who like to exercise, will vibe with the Chamelo Music Shield. These high-tech shades let you control the level of tint just by sliding your finger over the right arm of the glasses.</p><p>If you like to rock out while you work out (like me), the Music Shield lives up to its name with its built-in speakers. So you can listen to music without earbuds — as well as take calls — while still being able to hear the world around you. </p><div class="product"><a data-dimension112="1fe31725-c999-4e81-9585-4dd3fa34fe6f" data-action="Deal Block" data-label="Sunglasses have long been a staple of every kid's Father's Day gift repertoire. These take sun-blocking and inject tons of tech — they have tint-adjusting technology and a built-in speakers that'll make these the coolest sunglasses Dad has ever owned." data-dimension48="Sunglasses have long been a staple of every kid's Father's Day gift repertoire. These take sun-blocking and inject tons of tech — they have tint-adjusting technology and a built-in speakers that'll make these the coolest sunglasses Dad has ever owned." data-dimension25="$249" href="https://chamelo.com/products/music-shield-fire-lenses-sports-smart-glasses-electrochromic-tint-adjustable-changing-audio-sunglasses" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1132px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="UBhBREa3Gj4f7Rx7WckZ4C" name="1749051190.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/UBhBREa3Gj4f7Rx7WckZ4C.jpg" mos="" align="middle" fullscreen="" width="1132" height="1132" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Sunglasses have long been a staple of every kid's Father's Day gift repertoire. These take sun-blocking and inject tons of tech — they have tint-adjusting technology and a built-in speakers that'll make these the coolest sunglasses Dad has ever owned.<a class="view-deal button" href="https://chamelo.com/products/music-shield-fire-lenses-sports-smart-glasses-electrochromic-tint-adjustable-changing-audio-sunglasses" target="_blank" rel="nofollow" data-dimension112="1fe31725-c999-4e81-9585-4dd3fa34fe6f" data-action="Deal Block" data-label="Sunglasses have long been a staple of every kid's Father's Day gift repertoire. These take sun-blocking and inject tons of tech — they have tint-adjusting technology and a built-in speakers that'll make these the coolest sunglasses Dad has ever owned." data-dimension48="Sunglasses have long been a staple of every kid's Father's Day gift repertoire. These take sun-blocking and inject tons of tech — they have tint-adjusting technology and a built-in speakers that'll make these the coolest sunglasses Dad has ever owned." data-dimension25="$249">View Deal</a></p></div><h2 id="caddytalk-cube-laser-rangefinder">CaddyTalk Cube Laser Rangefinder</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="uY5L3ioARSbNyDbEGZMirR" name="CaddyTalk CUBE Laser Rangefinder" alt="CaddyTalk CUBE Laser Rangefinder" src="https://cdn.mos.cms.futurecdn.net/uY5L3ioARSbNyDbEGZMirR.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: CaddyTalk )</span></figcaption></figure><p>This is the rangefinder my colleague Dave uses every round — and he swears by it. Here in the Northeast, bad weather often means cart-path-only golf, where you’re not allowed to drive up to your ball. That usually means guessing your distance, grabbing a few clubs, and hoping you picked the right one.</p><p>The CaddyTalk Cube solves that problem. It lets you measure the distance between the ball and the flag without having to walk to your shot first. If your dad plays in similar conditions, this rangefinder will make his rounds a whole lot easier — and a lot more fun.</p><div class="product"><a data-dimension112="54c6d175-8c80-4233-aa32-d5a4a370d2d0" data-action="Deal Block" data-label="If your Dad is a golfer, this affordable rangefinder has all the standard distance measuring technology he'd expect from a rangefinder, including slope. It also triangulates two points. This means he can see how far the ball is from the hole without requiring him to stand over it, making it perfect for cart-path-only golf rounds." data-dimension48="If your Dad is a golfer, this affordable rangefinder has all the standard distance measuring technology he'd expect from a rangefinder, including slope. It also triangulates two points. This means he can see how far the ball is from the hole without requiring him to stand over it, making it perfect for cart-path-only golf rounds." data-dimension25="$349" href="https://www.amazon.com/CADDYTALK-Retro-Inspired-Rangefinder-Resistant-Rechargeable/dp/B0BXMT722V?th=1" 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="dYYsMxktPNLAD9cepiFF5E" name="1749051638.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dYYsMxktPNLAD9cepiFF5E.jpg" mos="" align="middle" fullscreen="" width="1200" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If your Dad is a golfer, this affordable rangefinder has all the standard distance measuring technology he'd expect from a rangefinder, including slope. It also triangulates two points. This means he can see how far the ball is from the hole without requiring him to stand over it, making it perfect for cart-path-only golf rounds.<a class="view-deal button" href="https://www.amazon.com/CADDYTALK-Retro-Inspired-Rangefinder-Resistant-Rechargeable/dp/B0BXMT722V?th=1" target="_blank" rel="nofollow" data-dimension112="54c6d175-8c80-4233-aa32-d5a4a370d2d0" data-action="Deal Block" data-label="If your Dad is a golfer, this affordable rangefinder has all the standard distance measuring technology he'd expect from a rangefinder, including slope. It also triangulates two points. This means he can see how far the ball is from the hole without requiring him to stand over it, making it perfect for cart-path-only golf rounds." data-dimension48="If your Dad is a golfer, this affordable rangefinder has all the standard distance measuring technology he'd expect from a rangefinder, including slope. It also triangulates two points. This means he can see how far the ball is from the hole without requiring him to stand over it, making it perfect for cart-path-only golf rounds." data-dimension25="$349">View Deal</a></p></div><h2 id="mogo-3-pro-projector">MoGo 3 Pro projector</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="cDiL4sJJQdkMcBQeaWdA6m" name="Mogo 3 Pro" alt="Xgimi MoGo 3 Pro" src="https://cdn.mos.cms.futurecdn.net/cDiL4sJJQdkMcBQeaWdA6m.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Xgimi)</span></figcaption></figure><p>Dads who love movie night will get a kick out of the <a href="https://www.tomsguide.com/tvs/forget-oled-tvs-this-new-xgimi-laser-projector-can-beam-an-image-of-up-to-150-inches">MoGo 3 Pro</a> outodoor projector. It delivers full HD visuals up to 120 inches using a 130-degree adjustable stand, so getting the right angle is a breeze. <br><br>With Google TV built in, he'll have instant access to all his favorite streaming apps, from Netflix to Prime Video. And there's 5-watt Harman Kardon speakers built in for surprisingly rich sound.</p><p>You can also grab the MoGo 3 Pro with a PowerBase stand for $409, which has its own 2.5-hour battery built in — just enough juice for most action flicks. </p><div class="product"><a data-dimension112="d97643b8-1882-474c-98df-3ff57be7fe18" data-action="Deal Block" data-label="Netflix, Prime Video, and YouTube are already built into this projector, making it easy to watch whatever you want. It projects up to 120 inches of screen, so you can get that movie theater feel any time. Add in the Harmon Kardon and you have a perfect gift for the movie-loving Dad in your life." data-dimension48="Netflix, Prime Video, and YouTube are already built into this projector, making it easy to watch whatever you want. It projects up to 120 inches of screen, so you can get that movie theater feel any time. Add in the Harmon Kardon and you have a perfect gift for the movie-loving Dad in your life." data-dimension25="$359" href="https://www.amazon.com/XGIMI-MoGo-Pro-Projector-Adjustable/dp/B0D8HRH431?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:800px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="9PGX7uvYkmKW56spf6XeXd" name="1749051430.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9PGX7uvYkmKW56spf6XeXd.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Netflix, Prime Video, and YouTube are already built into this projector, making it easy to watch whatever you want. It projects up to 120 inches of screen, so you can get that movie theater feel any time. Add in the Harmon Kardon and you have a perfect gift for the movie-loving Dad in your life.<a class="view-deal button" href="https://www.amazon.com/XGIMI-MoGo-Pro-Projector-Adjustable/dp/B0D8HRH431?th=1" target="_blank" rel="nofollow" data-dimension112="d97643b8-1882-474c-98df-3ff57be7fe18" data-action="Deal Block" data-label="Netflix, Prime Video, and YouTube are already built into this projector, making it easy to watch whatever you want. It projects up to 120 inches of screen, so you can get that movie theater feel any time. Add in the Harmon Kardon and you have a perfect gift for the movie-loving Dad in your life." data-dimension48="Netflix, Prime Video, and YouTube are already built into this projector, making it easy to watch whatever you want. It projects up to 120 inches of screen, so you can get that movie theater feel any time. Add in the Harmon Kardon and you have a perfect gift for the movie-loving Dad in your life." data-dimension25="$359">View Deal</a></p></div><h2 id="sony-wh-1000xm6-headphones">Sony WH-1000XM6 headphones</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="EqLwiimJxmTAnfouHsqjxC" name="Sony WH-1000XM6--02" alt="Side view of black Sony WH-1000XM6 noise-cancelling headphones held outdoors in sunshine" src="https://cdn.mos.cms.futurecdn.net/EqLwiimJxmTAnfouHsqjxC.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide)</span></figcaption></figure><p>Move over, Bose and Apple. The Sony WH-1000XM6 are arguably the <a href="https://www.tomsguide.com/us/best-headphones,review-1988.html">best headphones</a> for Dads who demand the very best sound quality along with top-notch noise cancellation. </p><p>You're guaranteed to block out the chaos of your commute or the roar of a plane engine plane engine with Sony's real-time noise cancellation system, which leverages advanced processors and adaptive mics. </p><p>That noise cancelling comes in handy for calls, too. In fact, in our <a href="https://www.tomsguide.com/audio/over-ear-headphones/sony-wh-1000xm6-review">Sony WH-1000XM6 review</a>, we praised the crystal-clear call quality. The touch controls are also intuitive, and you get an impressive 30 hours of battery life with the ANC turned on. These are on the pricey side, but they're worth every penny.</p><div class="product"><a data-dimension112="fe1a93d2-8992-4049-90b2-d2a4591ee07b" data-action="Deal Block" data-label="best headphones" data-dimension48="best headphones" data-dimension25="$449" href="https://www.amazon.com/Sony-WH-1000XM6-Headphones-Microphones-Studio-Quality/dp/B0F3PQHWTZ?th=1" 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:120.00%;"><img id="x3hpHUb8bPXUJsBkoevKDN" name="Sony WH-1000XM6" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/x3hpHUb8bPXUJsBkoevKDN.jpg" mos="" align="middle" fullscreen="" width="1000" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>These are some of the <a href="https://www.tomsguide.com/us/best-headphones,review-1988.html" data-dimension112="fe1a93d2-8992-4049-90b2-d2a4591ee07b" data-action="Deal Block" data-label="best headphones" data-dimension48="best headphones" data-dimension25="$449">best headphones</a> you can get. If your Dad wants wireless audio with quality that'll make him feel like he's at his favorite band's concert, the Sony XM6 deliver with excellent comfort, superior noise cancelling and improved call quality. Plus, you get 30 hours of juice on a charge.<a class="view-deal button" href="https://www.amazon.com/Sony-WH-1000XM6-Headphones-Microphones-Studio-Quality/dp/B0F3PQHWTZ?th=1" target="_blank" rel="nofollow" data-dimension112="fe1a93d2-8992-4049-90b2-d2a4591ee07b" data-action="Deal Block" data-label="best headphones" data-dimension48="best headphones" data-dimension25="$449">View Deal</a></p></div><h2 id="nintendo-switch-2">Nintendo Switch 2</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:1419px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="ZWK7txZqbPhrLEU3ZuM4f3" name="Nintendo Switch 2 docked" alt="Nintendo Switch 2 docked next to a TV" src="https://cdn.mos.cms.futurecdn.net/ZWK7txZqbPhrLEU3ZuM4f3.jpg" mos="" align="middle" fullscreen="" width="1419" height="798" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Nintendo)</span></figcaption></figure><p>Does Dad like Mario? Then he'll love it if you can score him a <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-review">Nintendo Switch 2</a>, which is easily the most sought-after gadget of the year. That's why we have a <a href="https://www.tomsguide.com/live/news/nintendo-switch-2-launch-day-restocks-and-live-news" target="_blank">Switch 2 live blog</a> going, helping people find stock as it arrives.</p><p>So what makes it so special? The Switch 2 packs a larger 7.9-inch display, improved 4K graphics (when docked) and improved Joy-Con 2 controllers that attach magnetically to the console. The game lineup looks like a blast, to, with titles like Mario Kart World.</p><p>And Nintendo is evolving the gaming experience with <a href="https://www.tomsguide.com/gaming/handheld-gaming/nintendo-switch-2-unveils-gamechat-heres-what-the-c-button-can-do">GameChat</a> and the optional $54 Switch 2 camera, which lets Dad put his face right in the game and interact with his kids even if they're miles away. </p><div class="product"><a data-dimension112="6c437bc3-4f0b-4de2-8628-35eee83492b5" data-action="Deal Block" data-label="Switch 2 restock live blog" data-dimension48="Switch 2 restock live blog" data-dimension25="$449" href="https://www.nintendo.com/us/gaming-systems/switch-2/features/" 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:100.00%;"><img id="LqRu5BAMW8ZQQsNcehJrPU" name="Nintendo-Switch-2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/LqRu5BAMW8ZQQsNcehJrPU.jpg" mos="" align="middle" fullscreen="" width="1152" height="1152" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Maybe it's not nice to share this one here since it's nearly impossible to find a Switch 2, but if you do manage to get one for your Dad for Father's Day, you'll be his favorite (assuming he likes video games). Just make sure to follow our <a href="https://www.tomsguide.com/live/news/nintendo-switch-2-pre-orders-launch-week-updates-and-restocks" data-dimension112="6c437bc3-4f0b-4de2-8628-35eee83492b5" data-action="Deal Block" data-label="Switch 2 restock live blog" data-dimension48="Switch 2 restock live blog" data-dimension25="$449">Switch 2 restock live blog</a> for the latest updates.<a class="view-deal button" href="https://www.nintendo.com/us/gaming-systems/switch-2/features/" target="_blank" rel="nofollow" data-dimension112="6c437bc3-4f0b-4de2-8628-35eee83492b5" data-action="Deal Block" data-label="Switch 2 restock live blog" data-dimension48="Switch 2 restock live blog" data-dimension25="$449">View Deal</a></p></div><h2 id="anker-solix-everfrost-2-cooler">Anker Solix EverFrost 2 cooler</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="wcSsjDr3yP7NSSxHkNDFcA" name="Anker Solix" alt="Anker Solix EverFrost 2" src="https://cdn.mos.cms.futurecdn.net/wcSsjDr3yP7NSSxHkNDFcA.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Anker)</span></figcaption></figure><p>Give the gift of Dad never having to go on an ice run again. The Anker Solix EverFrost 2 cooler  can keep your drink and food chilled all the way down to -4°F. And it can cool beverages from 77°F to 32°F in just 15 minutes.</p><p>The built-in battery can keep your drinks and other items chilled up to 52 hours, or you can extend that to 4.3 days with an optional second battery. </p><p>The Anker app lets you control the temperature from your phone, and you can even have different temps for the two zones. </p><p>Oh, and yes — it has built-in lights, just like your fridge. </p><div class="product"><a data-dimension112="bec54264-241e-4e94-a26d-6437f09f3c88" data-action="Deal Block" data-label="This cooler can chill your drinks with its built-in battery in just 15 minutes, so Dad won't need to worry about keeping it stocked with ice while he's out on the beach hanging out or hosting a killer BBQ, as Dads are known to do. Its battery lasts up to 52 hours, so he can throw a serious party that doesn't end." data-dimension48="This cooler can chill your drinks with its built-in battery in just 15 minutes, so Dad won't need to worry about keeping it stocked with ice while he's out on the beach hanging out or hosting a killer BBQ, as Dads are known to do. Its battery lasts up to 52 hours, so he can throw a serious party that doesn't end." data-dimension25="$799" href="https://www.amazon.com/Anker-EverFrost-Refrigerator-Electric-Included/dp/B0DRCNMMZ9?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:973px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="A5hSaMGqbtFvbParoUXEPF" name="Anker SOLIX EverFrost 2 42-quart Cooler" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/A5hSaMGqbtFvbParoUXEPF.png" mos="" align="middle" fullscreen="" width="973" height="973" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This cooler can chill your drinks with its built-in battery in just 15 minutes, so Dad won't need to worry about keeping it stocked with ice while he's out on the beach hanging out or hosting a killer BBQ, as Dads are known to do. Its battery lasts up to 52 hours, so he can throw a serious party that doesn't end.<a class="view-deal button" href="https://www.amazon.com/Anker-EverFrost-Refrigerator-Electric-Included/dp/B0DRCNMMZ9?th=1" target="_blank" rel="nofollow" data-dimension112="bec54264-241e-4e94-a26d-6437f09f3c88" data-action="Deal Block" data-label="This cooler can chill your drinks with its built-in battery in just 15 minutes, so Dad won't need to worry about keeping it stocked with ice while he's out on the beach hanging out or hosting a killer BBQ, as Dads are known to do. Its battery lasts up to 52 hours, so he can throw a serious party that doesn't end." data-dimension48="This cooler can chill your drinks with its built-in battery in just 15 minutes, so Dad won't need to worry about keeping it stocked with ice while he's out on the beach hanging out or hosting a killer BBQ, as Dads are known to do. Its battery lasts up to 52 hours, so he can throw a serious party that doesn't end." data-dimension25="$799">View Deal</a></p></div><h2 id="samsung-galaxy-s25-edge">Samsung Galaxy S25 Edge</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="rUW9yjh7Z9oLyiRm8Yqq9W" name="Samsung Galaxy S25 Edge review" alt="Samsung Galaxy S25 Edge review." src="https://cdn.mos.cms.futurecdn.net/rUW9yjh7Z9oLyiRm8Yqq9W.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Tom's Guide / John Velasco)</span></figcaption></figure><p>The Galaxy S25 Edge is one of those phones you have to hold to believe. At just 5.8mm (0.23 inches) thick and 5.75 ounces, it’s the thinnest Galaxy S series phone ever — and easily one of the most elegant designs we’ve seen.</p><p>In our <a href="https://www.tomsguide.com/phones/samsung-phones/samsung-galaxy-s25-edge-review">Galaxy S25 Edge review,</a> we really liked the sheer portability of this device. You also get a large 6.7-inch OLED display, powerful 200MP camera and latest Snapdragon 8 Gen Elite chip. Plus, Samsung stuffs all the latest Galaxy AI features inside this slim phone.</p><p>Dad will have to trade off some battery life and do without telephoto zoom, but if design matters most, this is easily one of the most impressive phones of the year.</p><div class="product"><a data-dimension112="ff9c4c48-0e43-43f2-acc7-f35cca0f2fcd" data-action="Deal Block" data-label="Galaxy S25 Edge: up to $750 off w/ trade-in @ Samsung" data-dimension48="Galaxy S25 Edge: up to $750 off w/ trade-in @ Samsung" data-dimension25="$1099" 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:100.00%;"><img id="ZJZztnnZP9y8GYLvnKc6SH" name="Samsung Galaxy S25 Edge deal block" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ZJZztnnZP9y8GYLvnKc6SH.jpg" mos="" align="middle" fullscreen="" width="600" height="600" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p><strong>Galaxy S25 Edge: </strong><a href="https://www.samsung.com/us/smartphones/galaxy-s25-edge/buy/" target="_blank" rel="nofollow" data-dimension112="ff9c4c48-0e43-43f2-acc7-f35cca0f2fcd" data-action="Deal Block" data-label="Galaxy S25 Edge: up to $750 off w/ trade-in @ Samsung" data-dimension48="Galaxy S25 Edge: up to $750 off w/ trade-in @ Samsung" data-dimension25="$1099"><strong>up to $750 off w/ trade-in @ Samsung</strong></a> The Galaxy S25 Edge isn't a cheap gift, but if your Dad needs a new phone and he likes his devices to be thin and light, it might be worth throwing down for the S25 Edge. It's one of the <a href="https://www.tomsguide.com/us/best-android-phones,review-6051.html">best Android phones</a> money can buy, and right now you can save up to $750 with trade-in. <a class="view-deal button" href="" target="_blank" rel="nofollow" data-dimension112="ff9c4c48-0e43-43f2-acc7-f35cca0f2fcd" data-action="Deal Block" data-label="Galaxy S25 Edge: up to $750 off w/ trade-in @ Samsung" data-dimension48="Galaxy S25 Edge: up to $750 off w/ trade-in @ Samsung" data-dimension25="$1099">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/home/home-depot-fathers-day-sale-is-live-from-usd12-17-deals-id-shop-now-on-grills-smart-home-tech-tools-and-more">Home Depot Father's Day sale is live from $12 — 27 deals I'd shop now on grills, smart home tech, tools and more</a></li><li><a href="https://www.tomsguide.com/sales-events/fathers-day-sale-15-gift-ideas-id-shop-from-patagonia-under-armour-and-more">Father's Day sale — 17 gift ideas I'd shop from Patagonia, Under Armour and more</a></li><li><a href="https://www.tomsguide.com/home/outdoors/gardeners-urged-to-pour-dish-soap-on-lawns-this-summer-and-its-not-as-crazy-as-it-sounds">Gardeners urged to pour dish soap on lawns this summer — and it's not as crazy as it sounds</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Trump's tariffs just blocked by major court ruling — here's what it means for you ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/trumps-tariffs-just-blocked-by-major-court-ruling-heres-what-it-means-for-you</link>
                                                                            <description>
                            <![CDATA[ The Court of International Trade just blocked all of Trump's tariffs, and that could be good news for consumers. For now, at least. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">iaEDGgjGNV88b7aV7ruWQh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/RetMHcFP8ConeXSthfvyob-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 29 May 2025 12:32:08 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ tom.pritchard@futurenet.com (Tom Pritchard) ]]></author>                    <dc:creator><![CDATA[ Tom Pritchard ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/biCewUkKfSA6QnT2HxVc3f.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/RetMHcFP8ConeXSthfvyob-1280-80.jpg">
                                                            <media:credit><![CDATA[ROBERTO SCHMIDT / Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[President Trump signing an executive order]]></media:description>                                                            <media:text><![CDATA[President Trump signing an executive order]]></media:text>
                                <media:title type="plain"><![CDATA[President Trump signing an executive order]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/RetMHcFP8ConeXSthfvyob-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Those of you who were concerned about <a href="https://www.tomsguide.com/computing/buying-cheap-tech-could-take-a-hit-in-2025-trumps-tariffs-explained">tariffs affecting the cost of your electronics </a>may be in luck. A 3-judge panel at the Court of International Trade in New York has <a href="https://www.reuters.com/world/us/us-court-blocks-trumps-liberation-day-tariffs-2025-05-28/" target="_blank">ruled</a> that President Donald Trump exceeded his authority by imposing severe tariffs on imports, effectively declaring them illegal.</p><p>Congress usually approves tariffs, but Trump has previously declared that the U.S. trade deficit constituted a national emergency, which would give him the power to apply those tariffs on countries around the world. </p><p>The judges did note that they were not judging the president's use of tariffs as "leverage" in trade talks. But simply about whether Trump had the authority to apply them in the first place. They stated that tariffs are “impermissible not because it is unwise or ineffective, but because [federal law] does not allow it.”</p><p>The judges have said that the Trump administration must issue a new order reflecting this injunction within the next 10 days.</p><h2 id="how-will-this-affect-you">How will this affect you?</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="hUhUHHyBV4F8m8QWAW8ZHn" name="Capitol Building of USA.jpg" alt="The Capitol Building in the USA" src="https://cdn.mos.cms.futurecdn.net/hUhUHHyBV4F8m8QWAW8ZHn.jpg" mos="" align="middle" fullscreen="" width="1920" height="1080" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Getty Images)</span></figcaption></figure><p>The key thing to remember here is that this does not mean the end of tariffs. The Trump administration has already filed an appeal against the ruling and spoken out against the court's authority. "It is not for unelected judges to decide how to properly address a national emergency,” White House spokesperson Kush Desai told <a href="https://www.reuters.com/world/us/us-court-blocks-trumps-liberation-day-tariffs-2025-05-28/" target="_blank"><u>Reuters.</u></a></p><p>Congress, which has always had the legal power to apply tariffs, is also controlled by the Republican Party. So while the president can't just announce new tariffs on social media or in a press conference, Congress could still pass tariffs under Trump's instruction, albeit at a much slower pace.</p><p>But moving at a slower pace, it's now much harder for Trump to use tariffs as a way to gain concessions from trading partners — and try to bring manufacturing jobs back to the U.S. in the process. It should also help alleviate the uncertainty of the tariff situation.</p><p>All of which is, of course, assuming that the court's ruling survives further appeals and legal challenges.</p><h2 id="what-about-the-price-of-gadgets">What about the price of gadgets?</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:2380px;"><p class="vanilla-image-block" style="padding-top:56.30%;"><img id="TjxqCHyUzkecFZqs48bhSe" name="Screenshot 2025-04-30 at 11.19.25" alt="iPhone 17 series dummy models" src="https://cdn.mos.cms.futurecdn.net/TjxqCHyUzkecFZqs48bhSe.png" mos="" align="middle" fullscreen="" width="2380" height="1340" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: AppleTrack)</span></figcaption></figure><p>Since the ruling invalidates all tariffs issued through the International Emergency Economic Powers Act, it should mean that the price of your gadgets won't go up. At least, not yet. </p><p>Congress could still impose tariffs on certain imports, and that means we could still see a 25% tariff on all iPhones that aren't made in the U.S., which would be all iPhones, since<a href="https://www.tomsguide.com/phones/iphones/how-will-tariffs-impact-the-iphone-17-price-heres-what-the-experts-say"> it would be years before any hypothetical U.S.-made iPhones could ever be made</a>. Assuming they ever do.</p><p>However, the fact that these tariffs would go through the usual channels should give everyone advance notice of what's happening. No more waking up and seeing that <a href="https://www.tomsguide.com/computing/buying-cheap-tech-could-take-a-hit-in-2025-trumps-tariffs-explained">tariffs on Chinese imports</a> are up by X per cent. Or that certain tariffs have now been postponed by however many weeks.</p><p>That way, companies will be able to determine whether they can absorb some of the tariff costs or if they will have to be passed on to the consumer, and inform everyone accordingly. It may not stop you from having to pay more for the <a href="https://www.tomsguide.com/phones/iphones/apple-ceo-tim-cook-comments-on-how-tariffs-might-affect-iphone-prices-for-the-first-time">iPhone 17 </a>or <a href="https://www.tomsguide.com/gaming/handheld-gaming/nintendo-switch-2-what-the-tariff-pause-could-mean-for-nintendos-big-launch">Nintendo Switch 2</a>, but at least it means you should know ahead of time.</p><p>Again, assuming the new court ruling sticks, and the President doesn't gain the ability to impose or remove tariffs at a moment's notice legally.</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/computing/gaming-laptops/nvidias-rumored-gaming-laptop-apu-just-spotted-in-new-leak-what-we-know">Nvidia's rumored gaming laptop APU just spotted in new leak — what we know</a></li><li><a href="https://www.tomsguide.com/live/news/nintendo-switch-2-pre-orders-updates-and-restocks">Nintendo Switch 2 pre-orders live — latest restock updates and retailers to check now</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-just-shown-off-in-hands-on-video-and-theres-a-big-design-trade-off">iPhone 17 Pro Max just shown off in hands-on video — and there's a big design trade-off</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been using this 3-in-1 wireless charger for 2 weeks — and it's a must-have for travel ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/ive-been-using-this-3-in-1-wireless-charger-for-2-weeks-and-its-a-must-have-for-travel</link>
                                                                            <description>
                            <![CDATA[ Looking for a convenient way to charge your phone, smartwatch and earbuds? Satechi's OnetheGo wireless chargers can do it all thanks to their compact, flexible and travel-friendly design. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CazJLi6EDpLBZwBytLAbSC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/wMx7oruCkQ5bhg5Tr8Yrpe-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 11 May 2025 09:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Darragh Murphy ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/5QiaTSWf9FcVB7STxcdo4M.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Darragh is Tom’s Guide’s Computing Editor and is fascinated by all things bizarre in tech. This usually leads to assorted coverage varying from washing machines designed for earbuds to the wild world of laptops. Whether it&#039;s connecting Scar from The Lion King to two-factor authentication or turning his love for laptops into a fabricated rap battle from 8 Mile, he believes there’s always a quirky spin to be made.&lt;br&gt;&lt;br&gt;Darragh has previously been an Editor for Laptop Mag and a News Editor for Time Out Dubai, where he also headed the gaming and tech section. His work can be seen in Mashable, Android Police, Shortlist Dubai, Proton, theBit.nz, ReviewsFire and more. &lt;br&gt;&lt;br&gt;While laptops are his bread and butter, he’s also reviewed smartphones, monitors, speakers, docking stations and VPNs. He’s covered IFA, MWC Barcelona, the Consumer Electronics Show (&lt;a href=&quot;https://www.tomsguide.com/uk/tag/ces&quot; target=&quot;_blank&quot;&gt;CES&lt;/a&gt;) and more.&lt;br&gt;&lt;br&gt;When he&#039;s not checking out the latest devices and all things computing, he can be found going for dreaded long runs, watching terrible shark movies, and trying to find time to game.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/wMx7oruCkQ5bhg5Tr8Yrpe-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Satechi OntheGO Charger in hand with park in background]]></media:description>                                                            <media:text><![CDATA[Satechi OntheGO Charger in hand with park in background]]></media:text>
                                <media:title type="plain"><![CDATA[Satechi OntheGO Charger in hand with park in background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/wMx7oruCkQ5bhg5Tr8Yrpe-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>No matter how great the battery life is on a smartphone, smartwatch or pair of earbuds, they'll all bite the dust and need some juice <em>eventually</em> — and I usually turn to <a href="https://www.tomsguide.com/best-picks/best-wireless-chargers">wireless chargers</a> to get the job done. </p><p>It's a convenient, cordless way to give your devices a battery boost, and if it means having a cleaner desk setup without a mess of cables scattered around a surface, I'm all for it. </p><p>Nope, it's not as fast as plugging in a wire and seeing battery percentage go from 0% to 100% in 30 minutes or less, even with upgraded 25W <a href="https://www.tomsguide.com/best-picks/best-magsafe-chargers-for-your-iphone-year">MagSafe</a> and the <a href="https://www.tomsguide.com/phones/what-is-qi2-wireless-charging">Qi2 standard</a> offering 15W speeds. But it sure it a stylish, clutter-free way to charge your devices on a desk or nightstand. </p><p>But what about when you're traveling? Of course, there are some <em>very </em>power-packed <a href="https://www.tomsguide.com/best-picks/best-portable-chargers">power banks</a> out there that also include MagSafe (I have an Anker one myself), but there are only so many devices they can charge simultaneously, and there are only so many USB cables I want to see tangled in my bag. </p><p>A minor nuisance, to say the least, but I've found a solution: the <a href="https://satechi.net/products/onthego-3-in-1-charger" target="_blank" rel="nofollow">Satechi OntheGo Charger</a>. Coming in both a 2-in-1 and 3-in-1 design, these wireless chargers aren't just made for organized traveling for your tech, but they also make for suitable chargers at home or in an office. Why? Well, they're just so damn flexible and compact. </p><p>These aren't trailblazers in what they do; you'll find many of the <a href="https://www.tomsguide.com/best-picks/best-wireless-chargers">best wireless chargers</a> can power up your iPhone, Apple Watch and AirPods at the same time. But Satechi's OntheGo is far more travel-friendly, and because of that, it's the one charger I've been bringing everywhere over the past two weeks. </p><div class="product"><a data-dimension112="698876ec-a740-4af3-be3f-74349675a133" data-action="Deal Block" data-label="Satechi's OntheGo 3-in-1 Charger lets you wirelessly refuel your phone, smartwatch and earbuds in a foldable, travel-friendly design. Supporting Qi2 charging, it offers 15W speeds for phones and a 5W charge for wearables and earbuds. Right now, there's a $10 discount!" data-dimension48="Satechi's OntheGo 3-in-1 Charger lets you wirelessly refuel your phone, smartwatch and earbuds in a foldable, travel-friendly design. Supporting Qi2 charging, it offers 15W speeds for phones and a 5W charge for wearables and earbuds. Right now, there's a $10 discount!" data-dimension25="$89" href="https://www.amazon.com/Satechi-OntheGoTM-Wireless-Portable-Charging/dp/B0F49KPL7T" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="9Bpc7Xoo4bqnjhM63cxAL7" name="Satechi OntheGo 3-in-1 Charger" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9Bpc7Xoo4bqnjhM63cxAL7.jpg" mos="" align="middle" fullscreen="" width="3000" height="3000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Satechi's OntheGo 3-in-1 Charger lets you wirelessly refuel your phone, smartwatch and earbuds in a foldable, travel-friendly design. Supporting Qi2 charging, it offers 15W speeds for phones and a 5W charge for wearables and earbuds. Right now, there's a $10 discount!<a class="view-deal button" href="https://www.amazon.com/Satechi-OntheGoTM-Wireless-Portable-Charging/dp/B0F49KPL7T" target="_blank" rel="nofollow" data-dimension112="698876ec-a740-4af3-be3f-74349675a133" data-action="Deal Block" data-label="Satechi's OntheGo 3-in-1 Charger lets you wirelessly refuel your phone, smartwatch and earbuds in a foldable, travel-friendly design. Supporting Qi2 charging, it offers 15W speeds for phones and a 5W charge for wearables and earbuds. Right now, there's a $10 discount!" data-dimension48="Satechi's OntheGo 3-in-1 Charger lets you wirelessly refuel your phone, smartwatch and earbuds in a foldable, travel-friendly design. Supporting Qi2 charging, it offers 15W speeds for phones and a 5W charge for wearables and earbuds. Right now, there's a $10 discount!" data-dimension25="$89">View Deal</a></p></div><div class="product"><a data-dimension112="ba9bbaa8-38ed-40a7-985c-dd5f2debf6fe" data-action="Deal Block" data-label="Don't need the extra charging pad? The Satechi OntheGo 2-in-1 Charger delivers an even more compact design to charge your phone and smartwatch, and it comes with the same scratch-resistant material with vegan leather accents. It's more affordable and, right now, also comes with a price cut." data-dimension48="Don't need the extra charging pad? The Satechi OntheGo 2-in-1 Charger delivers an even more compact design to charge your phone and smartwatch, and it comes with the same scratch-resistant material with vegan leather accents. It's more affordable and, right now, also comes with a price cut." data-dimension25="$71" href="https://www.amazon.com/Satechi-OntheGoTM-Wireless-Portable-Charging/dp/B0F4B9ZYMK" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3000px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="7nPjaQvtFwg4dpiRWY2D8D" name="Satechi OntheGo 2-in-1 Charger" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7nPjaQvtFwg4dpiRWY2D8D.jpg" mos="" align="middle" fullscreen="" width="3000" height="3000" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Don't need the extra charging pad? The Satechi OntheGo 2-in-1 Charger delivers an even more compact design to charge your phone and smartwatch, and it comes with the same scratch-resistant material with vegan leather accents. It's more affordable and, right now, also comes with a price cut.<a class="view-deal button" href="https://www.amazon.com/Satechi-OntheGoTM-Wireless-Portable-Charging/dp/B0F4B9ZYMK" target="_blank" rel="nofollow" data-dimension112="ba9bbaa8-38ed-40a7-985c-dd5f2debf6fe" data-action="Deal Block" data-label="Don't need the extra charging pad? The Satechi OntheGo 2-in-1 Charger delivers an even more compact design to charge your phone and smartwatch, and it comes with the same scratch-resistant material with vegan leather accents. It's more affordable and, right now, also comes with a price cut." data-dimension48="Don't need the extra charging pad? The Satechi OntheGo 2-in-1 Charger delivers an even more compact design to charge your phone and smartwatch, and it comes with the same scratch-resistant material with vegan leather accents. It's more affordable and, right now, also comes with a price cut." data-dimension25="$71">View Deal</a></p></div><p>If you enjoy a wireless setup even when you're traveling for work, to events or abroad on vacation, the Satechi OnetheGo wireless charger can be a great companion — and there are a few reasons why.  </p><h2 id="flexible-charging">Flexible charging</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:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="8XGg9NUQ7Ejju4oUhnQDHS" name="Satechi OnetheGO Charger" alt="Satechi OnetheGO Chargers unfolded on wooden table" src="https://cdn.mos.cms.futurecdn.net/8XGg9NUQ7Ejju4oUhnQDHS.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Many wireless or MagSafe chargers come with three pads to charge different devices, but one thing you'll notice is that they're all quite solid and sturdy. They're made to be this way as permanent fixtures on your desk or nightstand, so they aren't exactly portable. </p><p>Satechi takes that concept and loosens things up with its OntheGo chargers. Keeping the same 3-in-1 (or 2-in-1) simultaneous charging capabilities but allowing the pads to fold up like a tech sandwich, the wireless chargers become compact enough to easily slip into a <a href="https://www.tomsguide.com/news/best-laptop-bags">laptop bag</a> or even a pocket. </p><p>Coming in at 9.5 x 2.6 x 0.4 inches and weighing 5.1 ounces for the 3-in-1 charger, it's incredibly lightweight to carry around. Plus, it doesn't take up too much space when storing it away. I never had to worry about the vegan leather straps flopping about either, as the pads are magnetically attached when folded on top of one another. </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:3736px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="N6Y4YRksXFd6cYNrJSowof" name="Satechi OntheGo Charger" alt="Satechi OntheGo Charger on wooden table with iPhone, Apple Watch and AirPods Pro 2 case being charged" src="https://cdn.mos.cms.futurecdn.net/N6Y4YRksXFd6cYNrJSowof.jpg" mos="" align="middle" fullscreen="" width="3736" height="2101" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>This kind of flexibility also leads to other use cases. Of course, I could completely lay it out to charge an <a href="https://www.tomsguide.com/phones/iphones/apple-iphone-16-review">iPhone 16</a>, <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-series-10-review">Apple Watch Series 10</a> and <a href="https://www.tomsguide.com/reviews/airpods-pro-2-review">AirPods Pro 2</a>, but it can also be used as a stand to watch shows on the phone while it charges, all while the Apple Watch puck juices up the smartwatch right behind it. </p><p>That especially comes in handy when I'm traveling on a train or plane with a fold-down table I can lay my devices on. It's similar to a MagSafe power bank with a stand, but I get to charge both of my devices wirelessly. Yes, there's still a cable attached to power the OntheGo wireless charger (included in the box, no less)</p><p>Speaking of, you can also plug it into a power bank to charge while you're set up somewhere without an outlet. </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:5712px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XW2nvEfNzFqLxxyVsJDiNH" name="Satechi OnetheGO Charger" alt="Satechi OnetheGO Charger  with Apple Watch being charged on bench with Anker MagSafe power bank in hand" src="https://cdn.mos.cms.futurecdn.net/XW2nvEfNzFqLxxyVsJDiNH.jpg" mos="" align="middle" fullscreen="" width="5712" height="3213" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>This isn't to say there aren't other travel-friendly wireless chargers out there, as the <a href="https://www.tomsguide.com/phones/iphones/this-2-in-1-magsafe-charger-has-an-ingenious-design-like-none-other-before-it-and-its-my-favorite-travel-accessory">Twelve South Butterfly 2-in-1 MagSafe Charger</a><strong> </strong>is one of the smallest around, but the OntheGo also offers a splash of style. To me, it almost looks like a tech-savvy macaroon when all folded up, and the charger comes in various colorways: Black, an off-white Sand and pinkish Desert Rose. </p><p>Depending on your desk setup or style, these can really add to the color scheme you're keen on. I was able to get my hands on the 2-in-1 and 3-in-1 OntheGos in Black and Sand, and while the black option compliments my devices, I'm a big fan of how the lighter option looks. </p><h2 id="suited-for-desks-too">Suited for desks, too</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="HFfKDitsYaMWaBGMUjcqSo" name="Satechi OntheGO Charger" alt="Satechi OntheGO Charger with iPhone, AirPods Pro 2 case and Apple Watch being charged on desk next to MacBook Air" src="https://cdn.mos.cms.futurecdn.net/HFfKDitsYaMWaBGMUjcqSo.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>While it's aimed to be used for travel, Satechi's OnetheGo chargers also make for fitting tabletop accessories. Whether that be on your office desk, nightstand or anywhere you prefer to charge your devices. </p><p>I'm all about a clean desk setup while working (and relaxing) at home, one without cables coming out of every port on all the devices that are stuffed on my desk (a laptop, monitor, tablet stand, headphones holder, controllers — you get the gist). So, having a place to wirelessly charge three of my generally on-person devices aids in the bliss of an organized desk space. </p><p>Always having a place to put my phone, smartwatch and earbuds on charge just by placing them on the pads is a boon for my day to day, and being able to pick it up and slip it into my bag before heading out is an extra bonus. </p><h2 id="simplicity-for-travel">Simplicity for travel</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iST5AfRZHqUN9x4JPZV2K7" name="Satechi OntheGO Charger-2" alt="Satechi OntheGO Chargers in hand with fence and bush in the background" src="https://cdn.mos.cms.futurecdn.net/iST5AfRZHqUN9x4JPZV2K7.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Tom's Guide)</span></figcaption></figure><p>Look, chargers are simple accessories. If they can give your devices the battery boost they need, then they're doing their job right. But if you're looking for the added convenience of a wireless charger in a lovely, compact design to easily take along with you on all your journeys, then it's hard to go wrong with the Satechi OntheGo Charger. </p><p>For me, the 3-in-1 OntheGo wireless charger has benefited my travels to work and events, and it also makes for a nice addition to my desk. At <a href="https://www.amazon.com/Satechi-OntheGoTM-Wireless-Portable-Charging/dp/B0F49KPL7T" target="_blank" rel="nofollow">$99</a>/<a href="https://www.amazon.co.uk/OntheGoTM-Wireless-Portable-Charging-Magnetic-Sand/dp/B0F49M4LSM" target="_blank" rel="nofollow">£99</a>, it's not exactly cheap, but it's still more affordable than other chargers on the market (even the Twelve South Butterfly 2-in-1 is $129 / £129). </p><p>If you don't need the extra pad and prefer to save a little, the OntheGo 2-in-1 for <a href="https://www.amazon.com/Satechi-OntheGoTM-Wireless-Portable-Charging/dp/B0F4B9ZYMK" target="_blank" rel="nofollow">$79</a>/<a href="https://www.amazon.co.uk/OntheGoTM-Wireless-Portable-Charging-Magnetic-Sand/dp/B0F4BBL3YM" target="_blank" rel="nofollow">£79</a> is also an excellent option. </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/computing/peripherals/i-added-satechis-new-usb-c-hub-and-stand-to-my-mac-mini-m4-and-its-the-perfect-upgrade">I love the Mac mini M4 but this new stand and hub fixes the worst parts of Apple’s mini PC</a></li><li><a href="https://www.tomsguide.com/best-picks/best-portable-chargers">What are the best power banks in 2025? I'm always using portable chargers and these are my favorites</a></li><li><a href="https://www.tomsguide.com/computing/peripherals/this-robot-gan-charger-is-one-of-my-favorite-gadgets-of-2024-and-it-just-got-a-big-upgrade">This robot GaN charger is one of my favorite gadgets — and it just got a huge upgrade</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I lose my TV remote all the time — and this sticker tracker has come to my rescue ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/tile-sticker-2024-review</link>
                                                                            <description>
                            <![CDATA[ I wouldn't recommend the Tile Sticker 2024 to track everything. But for items around the home — like a remote control that's prone to go missing, for example — it proves its worth as a Bluetooth-based tracking device. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KsRrrQVwGJ4se2qMS6BQxg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/LQ4cFxzvtWaXwjbhxHjRx6-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 06 May 2025 23:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Philip Michaels ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/LBUqkHQCeeRgqR9Mz69X75.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/LQ4cFxzvtWaXwjbhxHjRx6-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tile Sticker on an Apple TV remote control]]></media:description>                                                            <media:text><![CDATA[Tile Sticker on an Apple TV remote control]]></media:text>
                                <media:title type="plain"><![CDATA[Tile Sticker on an Apple TV remote control]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/LQ4cFxzvtWaXwjbhxHjRx6-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>No tracking device has shot up in my estimation more over the years than the Tile Sticker. When first introduced around five years ago, the sticker suffered from limited range and a hard-to-hear alarm. But Tile has worked mighty hard to improve this device to the point where the Tile Sticker 2024 ranks among the <a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html">best key finders</a> out there, especially if you're looking to track down objects that aren't always easy to equip with a tracking device.</p><div  class="fancy-box"><div class="fancy_box-title">Tile Sticker 2024 specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Size: </strong>1.1 x 1.1 x 0.31 inches<br><strong>Listed range:</strong> 250 feet<br><strong>Tested range: </strong>55 feet<br><strong>Water-resistance?: </strong>IP68<br><strong>Battery:</strong>  3-year, non-replaceable  <br><strong>Colors: </strong>Black</p></div></div><p>The current version of the Tile Sticker has spent the last few months firmly attached to my <a href="https://www.tomsguide.com/reviews/apple-tv-4k-2021">Apple TV</a> remote, and it's more than earned its salt by letting me know when the remote control has slipped between couch cushions, hidden under a blanket or placed far from its designated storage space by someone in my household. </p><p>While I'm using the Tile Sticker to keep tabs on my remote control's location, this Bluetooth-based tracker is flexible enough to track a whole range of valuables. It's a great option for some specific use cases where you won't run into the device's lingering limitations. I'll explain what I mean in this Tile Sticker 2024 review.</p><h3 class="article-body__section" id="section-tile-sticker-2024-review-price-and-availability"><span>Tile Sticker 2024 review: Price and availability</span></h3><p>Like the <a href="https://www.tomsguide.com/tech/tile-mate-2024-review">Tile Mate</a>, the Tile Sticker costs $25, making it the cheapest Tile tracker you can buy. And much like its key finders, Tile likes to sell the Sticker in multi-packs, with a four-pack of devices costing $90. If you like the idea of tracking multiple devices, buying multiple Tile Stickers at a discount seems like a fine idea.</p><p>The Tile Sticker is the least color-conscious of any of Tile's devices. You can get the Sticker in any color you like, so long as it's black.</p><h3 class="article-body__section" id="section-tile-sticker-2024-review-design-and-features"><span>Tile Sticker 2024 review: Design and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="NpioBfCivVGqBrf7T2C857" name="tile-sticker-2" alt="Tile Sticker 2024 in palm of hand" src="https://cdn.mos.cms.futurecdn.net/NpioBfCivVGqBrf7T2C857.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Devices like the Tile Mate and <a href="https://www.tomsguide.com/tech/tile-pro-2024-review">Tile Pro</a> are meant to attach to key chains, backpacks and other valuables with straps, hooks or fobs. But what if the thing you want to track offers nothing but smooth surfaces?</p><p>That's where the Tile Sticker comes in. As the name implies, the bottom of surface of this tracker has an adhesive that you press onto the surface of something you want to monitor from an <a href="https://play.google.com/store/apps/details?id=com.thetileapp.tile&hl=en_US" target="_blank" rel="nofollow">Android</a> or <a href="https://apps.apple.com/us/app/tile-find-lost-keys-phone/id664939913" target="_blank" rel="nofollow">iOS app</a> on your phone. I've mentioned that I've got the Sticker stuck to an Apple TV remote, but Tile touts other possible use cases like tracking laptops, luggage, passports and more.</p><p>In my experience with my TV remote and the Tile Sticker, that adhesive keeps things attached very convincingly. I can pick up the remote by pinching the sides of the Tile Sticker without the remote threatening to come loose. </p><p><a href="https://www.tomsguide.com/reviews/tile-sticker-2022">Past Tile Stickers</a> have been perfectly circular, and while the 2024 version is less rectangular than its Tile counterparts, it still maintains some rounded edges. </p><p>There's a small button on the side of the Tile Sticker that you use to pair the device with your phone over Bluetooth. Pressing that button twice buzzes your phone, and with Life360 app integration, you can also set it to send an SOS alert to your Life360 contacts. (As with the other Tile trackers, you have to choose one option or the other.)</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:59.79%;"><img id="FF5GiJPcxvBbEpRMVuYhKD" name="tile-sticker-1" alt="Tile Sticker controlled from Tile App on iPhone" src="https://cdn.mos.cms.futurecdn.net/FF5GiJPcxvBbEpRMVuYhKD.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>I wouldn't count on the Tile Sticker for easily performing either the phone buzz or the SOS alert, as that button can be rather hard to locate and press when the tracker is flush against the surface of the object you're tracking. Really, the main function of the Tile Sticker is its best use case — when you can't find the object it's attached to, you fire up the Tile app, press a button and listen for the alarm to help you pinpoint the tracker's location.</p><p>A long-standing question with the Tile Sticker is whether you really want to add what is essentially a knob-sized protrusion to the otherwise sleek surface of whatever it is you're hoping to track. On something like a TV remote, that's a trade-off of functionality over form I'm willing to make. I might not be so sanguine about the jarring look and feel if it involved one of the <a href="https://www.tomsguide.com/best-picks/best-laptops">best laptops</a> or <a href="https://www.tomsguide.com/best-picks/best-ipad">best iPads</a>, though.</p><h3 class="article-body__section" id="section-tile-sticker-2024-review-performance"><span>Tile Sticker 2024 review: Performance</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="PKxujV5vpqvQnTC5cnkm57" name="tile-sticker-3" alt="Tile Sticker on an Apple TV remote control" src="https://cdn.mos.cms.futurecdn.net/PKxujV5vpqvQnTC5cnkm57.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>At a range of 250 feet, the Tile Sticker covers the smallest area of any Tile tracker, emphasizing the point that this device is best for keeping tabs on objects around the home. The Tile Sticker, like other Tile trackers, also relies solely on Bluetooth so long-range tracking or precision finding features like the ones supported by Ultra Wideband-equipped trackers are out of the question.</p><p>In this round of Tile tracker testing, all the 2024 models came up well short of their listed ranges when I took the trackers out into a park and measured how far I could stand from them before losing contact with my smartphone. In the case of the Tile Sticker, I got as much as 55 feet away before the Tile Sticker dropped out of sight on the Tile app; most of the time, the range was limited between 30 and 50 feet.</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:59.79%;"><img id="eKnd7e8dfNZGkHSRM3AJfg" name="tile-sticker-2" alt="Finding Tile Sticker via Tile app" src="https://cdn.mos.cms.futurecdn.net/eKnd7e8dfNZGkHSRM3AJfg.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>That's not ideal for keeping tabs on things outside of the home, but if you're using the Sticker on household objects like a remote control or a tool chest or something else that's unlikely to wander too far off, you'll find the Tile Sticker a lot more effective. Within close range, </p><p>it's pretty easy to hear the 100-decibel alarm, too, when you're using the Tile app to find a nearby Sticker. That said, for times when the Sticker-equipped remote gets stuck between couch cushions, it can be hard to hear that alert from a room way.</p><h3 class="article-body__section" id="section-tile-sticker-2024-review-verdict"><span>Tile Sticker 2024 review: Verdict</span></h3><p>For objects like keys, the Tile Mate is the better option, assuming you don't want the more precise finder features for iPhones and Galaxy devices supported by the <a href="https://www.tomsguide.com/reviews/apple-airtags">Apple AirTag</a> and <a href="https://www.tomsguide.com/tech/samsung-galaxy-smarttag-2-review">Samsung Galaxy SmartTag 2</a>, respectively. But for keeping tabs on the location of simple household items, it's hard to beat the convenience of the Tile Sticker, especially when you consider that device's low price and slim profile.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I tried this wallet-sized tracker for a month — and I wouldn't recommend it ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/tile-slim-2024-review</link>
                                                                            <description>
                            <![CDATA[ The Tile Slim is perfectly designed for a wallet or purse to make sure you don't lose track of your valuables. But the range is too limited to depend on this tracker. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">MsWTEaHqDJ2XZP5ZB5Lzjk</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/bYY575fvAcXnX4kYPCPdjE-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 06 May 2025 22:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Philip Michaels ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/LBUqkHQCeeRgqR9Mz69X75.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/bYY575fvAcXnX4kYPCPdjE-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tile Slim 2024]]></media:description>                                                            <media:text><![CDATA[Tile Slim 2024]]></media:text>
                                <media:title type="plain"><![CDATA[Tile Slim 2024]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/bYY575fvAcXnX4kYPCPdjE-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title">Tile Slim 2024 specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Size:</strong> 3.4 x 2.1 x 0.1 inches<br><strong>Listed range: </strong>350 feet<br><strong>Tested range:</strong> 75 meet<br><strong>Water-resistance?: </strong>IP68<br><strong>Battery: </strong> 3-year, non-replaceable  <br><strong>Colors:</strong> 8 color options</p></div></div><p>In addition to <a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html">best key finder</a> contenders like the <a href="https://www.tomsguide.com/tech/tile-pro-2024-review">Tile Pro</a> and <a href="https://www.tomsguide.com/tech/tile-mate-2024-review">Tile Mate</a>, the Tile lineup also includes speciality trackers for more specific tasks. Chief among them is the Tile Slim, a credit card-sized tracking device that slips into a wallet or purse for easy monitoring from an app on your phone.</p><p>Or at least it would be easy, if the Tile Slim wasn't beset by limitations to both design and performance. I generally like the 2024 lineup of Tile tracking devices, but the Slim is clearly the weakest of the bunch. My Tile Slim 2024 review looks at why.</p><h3 class="article-body__section" id="section-tile-slim-2024-review-price-and-availability"><span>Tile Slim 2024 review: Price and availability</span></h3><p>The Tile Slim costs $30 — more than the $25 Tile Mate but less than the $35 Tile Pro. </p><p>That $30 cost only applies to the black version of the wallet tracker. Tile offer the Slim in eight color combinations total, but versions in green, aqua, navy and pink raise the price to $34.</p><p>The additional colors are certainly more eye-catching than the basic black version — I certainly liked the look of the green Tile Slim I tested. But with the tracker tucked into a slot inside your wallet — and thus out of view most of the time — is that splash of color really worth an extra $3?</p><h3 class="article-body__section" id="section-tile-slim-2024-review-design-and-features"><span>Tile Slim 2024 review: Design and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="J7C4DGhywTU7caBgCGQCkE" name="tile-wallet-2" alt="Tile Slim 2024" src="https://cdn.mos.cms.futurecdn.net/J7C4DGhywTU7caBgCGQCkE.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>With its 3.4 x 2.1 x 0.1-inch dimensions, the Tile Slim was built to slip into a wallet, and at 14 grams, it's not adding any appreciable weight. </p><p>A device that thin doesn't leave much room for a replaceable battery. Indeed, like the Tile Mate and <a href="https://www.tomsguide.com/tech/tile-sticker-2024-review">Tile Sticker</a>, the Tile Slim uses a non-replaceable battery, though the manufacturer reckons on three years of use before requiring a replacement.</p><p>A Life360 logo in the lower left corner — Life360 now owns the Tile brand — doubles as a button. Press it twice, and you can make your phone ring. New for the latest model is integration with the Life360 app, which lets you set up the button for a triple press to trigger an SOS alert to your trusted Life360 contacts. </p><p>It's a nice addition, though you're forced to choose either the two-way find feature for your phone or the SOS alert. None of the new Tile products can support both alerts. </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:59.79%;"><img id="WbHpv8Y5ho3BPE3hrWwztn" name="tile-slim-software" alt="Tile Slim being tracked in Tile and Life360 apps" src="https://cdn.mos.cms.futurecdn.net/WbHpv8Y5ho3BPE3hrWwztn.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="caption-text">Tile app (left) and Life360 app (right) </span><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Apart from that addition, the Tile Slim's feature set remains the same as its predecessor's — and indeed, for all the Tile tracking devices. You pair the tracker with the Tile app (<a href="https://play.google.com/store/apps/details?id=com.thetileapp.tile&hl=en_US" target="_blank" rel="nofollow">Android</a>, <a href="https://apps.apple.com/us/app/tile-find-lost-keys-phone/id664939913" target="_blank" rel="nofollow">iOS</a>), which allows you to buzz the finder from your phone. Doing so triggers an alarm to help you track down the location of your misplaced wallet or purse.</p><p>The Tile Slim connects over Bluetooth, with no support for the Ultra Wideband connectivity offered by <a href="https://www.tomsguide.com/reviews/apple-airtags">Apple's AirTag</a> or <a href="https://www.tomsguide.com/tech/samsung-galaxy-smarttag-2-review">Samsung's Galaxy SmartTag 2</a>. Of course, neither of those products are wallet-sized nor can they work on phones that aren't either iPhone or Galaxy devices, respectively. The Tile Slim enjoys wider compatibility.</p><h3 class="article-body__section" id="section-tile-slim-2024-review-performance"><span>Tile Slim 2024 review: Performance</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:59.15%;"><img id="e9YoyhHGwp2ygJUbKBhtwE" name="tile-wallet-1" alt="Tile Slim 2024" src="https://cdn.mos.cms.futurecdn.net/e9YoyhHGwp2ygJUbKBhtwE.jpg" mos="" align="middle" fullscreen="" width="2000" height="1183" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Tile Slim promises the same 350-foot range as the Tile Mate, giving you a lot of space to find your wallet, should you leave it behind. And in my testing, which I conducted in a public park by setting down the tracking and seeing how far away I could get before I lost range, the Tile Slim posted numbers consistent with the Tile Mate I reviewed. In fact, the Tile Slim even offered a longer maximum distance, even if the range was about the same on average.</p><p>That's the good news. The bad news is that Tile's 2024 trackers fell far short of their promised range in my testing. The farthest I ever got from the wallet tracker was 75 feet before the connection dropped, and distances of 50 to 70 feet were more typical. That's a far cry from the 350 feet on the label.</p><p>I try to take a nuanced view of these results. Results in Bluetooth trackers can vary widely in my experience, and the important thing is that tracker performs consistently — something you could certainly say of the Slim. However, I can't overlook the fact that my best range with the 2024 model was worse than the <a href="https://www.tomsguide.com/reviews/tile-slim-2022">Tile Slim 2022</a> — and limited range was one of that device's biggest cons.</p><p>A 104-decibel alarm helps you find the Tile Slim when you love misplaced your wallet or purse, though after about 60 feet, I had trouble hearing the beeping over any ambient noise. Burying the Tile Slim in a pile of laundry — hey, I can't count the number of times my wallet has stayed in the back pocket of a pair of pants I've put in a clothes hamper — I also had difficulty hearing the alarm from a room away.</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:59.79%;"><img id="Au3qnMgBiySSgECrqzBUM6" name="tile-slim-software-2" alt="Tile Slim app showing tracking features" src="https://cdn.mos.cms.futurecdn.net/Au3qnMgBiySSgECrqzBUM6.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There are Tile Premium accounts for all these key finders, the Tile Slim included, where you pay $30/year for some extra features, the most important of which is Smart Alerts. These alerts will send you a ping when the Tile tracker is left behind, though there's some delay before that notification arrives. Once I went for a 10-minute stroll around the block without my wallet, and the Smart Alert only arrived on my iPhone by the time I was walking back up my front steps.</p><p>The bottom line? You can get plenty out of Tile's trackers, the Tile Slim included, without paying the annual Premium fee.</p><h3 class="article-body__section" id="section-tile-slim-2024-verdict"><span>Tile Slim 2024: Verdict</span></h3><p>Of all the things that Bluetooth trackers let you keep tabs on, wallets and purses would seem to be the most valuable — losing your keys can be an annoyance, but losing something with your cash, credit cards and ID can have serious repercussions. So naturally, you'd want a device that delivers time and time again.</p><p>Despite a design that's built for wallets, the Tile Slim 2024 just doesn't deliver the kind of consistent performance I'd want to see from a wallet-specific tracker. If the range were longer in testing and the alarm a bit easier to hear at a distance, I'd be more confident in using it in a wide variety of settings. As it stands, it works best for finding where you've left your wallet in your house, but in other circumstances, it's too hit-and-miss for my taste.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Tile Pro 2024 review: Still a good key finder, but a backward step ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/tile-pro-2024-review</link>
                                                                            <description>
                            <![CDATA[ The updated version of Tile's top-of-the-line key finder isn't as polished as past versions. Our Tile Pro 2024 review looks at what the key finder does well and where it falls short. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">weGEbpUNxCq9ro7z2gY8u3</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ru4HAxLJN8HUBwz4cTBoxZ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 06 May 2025 21:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Philip Michaels ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/LBUqkHQCeeRgqR9Mz69X75.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ru4HAxLJN8HUBwz4cTBoxZ-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tile Pro 2024]]></media:description>                                                            <media:text><![CDATA[Tile Pro 2024]]></media:text>
                                <media:title type="plain"><![CDATA[Tile Pro 2024]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ru4HAxLJN8HUBwz4cTBoxZ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A lot has changed since the last time we've seen a new version of the Tile Pro, a Bluetooth-based tracking device that attaches to valuable items like keys so that you can track their location from your phone. For starters, there's a lot more competition for the title of <a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html">best key finders</a> now, with Apple and Samsung making devices of their own to challenge third-party solutions like Tile's.</p><div  class="fancy-box"><div class="fancy_box-title">Tile Pro 2024 specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Size: </strong>2.1 x 1.3 x 0.3 inches<br><strong>Listed range:</strong> 500 feet<br><strong>Tested range: </strong>120 feet<br><strong>Water-resistance?:</strong> IP68<br><strong>Battery:</strong> 1-year, Replaceable <br><strong>Colors:</strong> Black, white</p></div></div><p>For another, Tile has been snapped up by Life360, which specializes in location tracking and family safety and sees keeping tabs on your valuables to be a natural extension of that mission. Under that umbrella comes the Tile Pro 2024, a new version of the top-of-the-line Bluetooth tracker that replaces the model I've been recommending for years.</p><p>Does this new version live up to its predecessor? You'll find out in my Tile Pro 2024 review.</p><h3 class="article-body__section" id="section-tile-pro-review-price-and-availability"><span>Tile Pro review: Price and availability</span></h3><p>A single Tile Pro tracker sells for $35, the same price as its predecessor. Colors are unchanged from the black and white options of previous versions, too, though there's now a Life360 swirling logo in the center of the button you press on the Tile Pro to either find your phone or trigger an SOS alert.</p><p>Life360 is counting on you to want to bundle multiple Tiles, whether it's a two-pack of the Pro (available for $60), a four-pack ($100) or a package that combines all four current Tile trackers ($98). Whether you get just one Tile Pro or multiple trackers, you can control all of them from an app that runs on <a href="https://apps.apple.com/us/app/tile-find-lost-keys-phone/id664939913" target="_blank" rel="nofollow">iOS</a> or <a href="https://play.google.com/store/apps/details?id=com.thetileapp.tile&hl=en_US" target="_blank" rel="nofollow">Android</a> devices.</p><p>Life360 continues to offer $29.99/year premium plans that feature Smart Alerts, 30-day location histories and warranties for your trackers. I'll address the Smart Alert feature in the Performance section of this Tile Pro review, but in my experience, you can get plenty of use out of your Tile tracker by sticking with the free service. </p><h3 class="article-body__section" id="section-tile-pro-review-design-and-features"><span>Tile Pro review: Design and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="eu6NXPgFst87tzL4pBioAa" name="Tile Pro 2024" alt="Tile Pro 2024" src="https://cdn.mos.cms.futurecdn.net/eu6NXPgFst87tzL4pBioAa.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The 2024 edition of the Tile Pro looks a lot like <a href="https://www.tomsguide.com/reviews/tile-pro-2022">the 2022 version</a> right down to its 2.1 x 1.3 x 0.3-inch dimensions. There's a ring around the mostly rectangular tracker with the upper left corner providing an area that can latch on to your keychain. The center of the tracker depresses ever so slightly, providing a visual cue for where you should press to operate some of the tracker's functionality.</p><p>The all-black appearance of my review unit looked pretty sleek, though I do remember earlier versions where a lot more craft went into Tile's Pro models. Since the 2022 model, Pro only describes the level of features, not the materials that go into setting this tracker apart from cheaper-looking models.</p><p>The Tile Pro is the only tracker in the Tile lineup that runs on a replaceable battery. You will need a paper clip to stick into a pinhole which allows you to slide open the back cover. Even with the replaceable battery, Life360 still promises IP68 water resistance for the Tile 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:1920px;"><p class="vanilla-image-block" style="padding-top:59.79%;"><img id="QjQguYSkR56BfmEA5ZGoaW" name="Tile app" alt="Tile app showing various items being tracked with tile key finders" src="https://cdn.mos.cms.futurecdn.net/QjQguYSkR56BfmEA5ZGoaW.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>You pair the Tile Pro via the Tile app running on your phone, with a Bluetooth connection providing the link between tracker and mobile device. A promised Ultra Wideband version of the Tile never materialized, so the Pro lacks the precision finding that devices like <a href="https://www.tomsguide.com/reviews/apple-airtags">Apple's AirTag </a>or <a href="https://www.tomsguide.com/tech/samsung-galaxy-smarttag-2-review">Samsung's Galaxy SmartTag 2</a> can deliver. But it also means the Tile Pro works with any phone that supports Bluetooth 4.0 or later.</p><p>The primary features are the same as before. From the Tile app on your phone, you can press a button to sound the Tile Pro's alarm, alerting you to the location of the tracker and whatever you've attached it to. Similarly, you can press a button on the tracker itself to make your phone ring, a feature I continue to find extremely valuable.</p><p>New this time around is integration with the Life360 app (<a href="https://play.google.com/store/apps/details?id=com.life360.android.safetymapd&hl=en_US" target="_blank" rel="nofollow">Android</a>, <a href="https://apps.apple.com/us/app/life360-stay-connected-safe/id384830320" target="_blank" rel="nofollow">iOS</a>) so that you can also control your Tile Pro from that app. Within Life360, you can also set up your Tile to send SOS alerts to people on your Life360 contact list, should you press the button on the tracker three times. You can cancel that alert from your phone if you do so within 15 seconds of that triple press. </p><p>Parents in particular will appreciate the SOS alert integration, particularly since it's available through the free tier of a Life360 membership. Unfortunately, these alerts come at the expense of using your Tile Pro's button to buzz your misplaced phone. You can set the button to perform one action, but not both — a disappointing limitation.</p><h3 class="article-body__section" id="section-tile-pro-review-performance"><span>Tile Pro review: Performance</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="cTdLLXJnGTSjRukPwKFx5a" name="Tile Pro 2024" alt="Tile Pro 2024" src="https://cdn.mos.cms.futurecdn.net/cTdLLXJnGTSjRukPwKFx5a.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>The Tile Pro claims to have the longest range of any of Tile's trackers at 500 feet. In my experience, trackers rarely reach the outer limits of their promised range — not that it's that big of a deal in practice. If you're standing 500 feet away from your lost keys in a crowded room, you're going to have a hard time hearing that alert, even if the 110-decibel sound of the Tile Pro is pretty loud as far as these things go.</p><p>That said, I took the Tile Pro out to different parks on multiple occasions to see how far I could get from my keys before losing the connection with the attached tracker. I never got more than 120 feet away, which is not only far short of the promised range but also less than the range of the previous version of the Tile Pro.</p><p>In the end, the kind of range I encountered in my testing is probably good enough if you're just trying to find misplaced keys around the home. In a crowded restaurant or public place, though, that's less ideal. </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:59.79%;"><img id="8YzoKHteWYtC6xkzHuoiaW" name="Tile app" alt="tile pro tracking keys in tile app" src="https://cdn.mos.cms.futurecdn.net/8YzoKHteWYtC6xkzHuoiaW.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>At least, the alarm is loud enough to hear in most circumstances. In one of my park tests, I could still make out the Tile Pro's alert from 80 feet away, even with the sound of someone vacuuming in a nearby house providing plenty of background noise. The alarm proved more muffled when I buried the Tile Pro under a pile of laundry and pressed the app's Find button from another room. But for the most part, I've been able to use the sound of the alert to track down the Tile Pro fairly quickly when I couldn't remember where I left it.</p><p>The Smart Alerts feature for Tile devices is part of the tracker's Premium subscription, and it sends you an alert when you've left your Tile behind. When driving a car, that can come in handy, as the Smart Alert arrived when I was a little less than a mile away, so I could have turned around and retrieved my item. On another occasion, I took a 10-minute walk around the block, and the Smart Alert arrived just as I was circling back to my house. That's less useful.</p><h3 class="article-body__section" id="section-tile-pro-review-verdict"><span>Tile Pro review: Verdict</span></h3><p>For the most part, Tile's trackers continue to be the best solution for most people who want to keep tabs on their keys but don't want a platform-dependent gadget like the <a href="https://www.tomsguide.com/reviews/apple-airtags">AirTag</a> or <a href="https://www.tomsguide.com/tech/samsung-galaxy-smarttag-2-review">GalaxyTag</a>. The Tile Pro works on any device, performs reliably and delivers the basic alert features you need to track down misplaced items.</p><p>That said, the fact that the Pro didn't come close to its promised range makes me think you're better off going with the <a href="https://www.tomsguide.com/tech/tile-mate-2024-review">Tile Mate 2024</a> and saving yourself the extra $10. Some people will prefer the replaceable battery, though, and if that's you, the Tile Pro is better suited to your needs.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been testing key finders for a decade — and this is my new top pick ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/tile-mate-2024-review</link>
                                                                            <description>
                            <![CDATA[ The Tile Mate may not be the most expensive of the Tile trackers, but it's the best. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">b5yvjCnAu8MFTWfsbq5kd3</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4UbXRC4bF3SDHSi7fc9pyN-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 06 May 2025 20:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Philip Michaels ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/LBUqkHQCeeRgqR9Mz69X75.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/4UbXRC4bF3SDHSi7fc9pyN-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Tile Mate 2024 key finder in hand]]></media:description>                                                            <media:text><![CDATA[Tile Mate 2024 key finder in hand]]></media:text>
                                <media:title type="plain"><![CDATA[Tile Mate 2024 key finder in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4UbXRC4bF3SDHSi7fc9pyN-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title">Tile Mate 2024 specs</div><div class="fancy_box_body"><p class="fancy-box__body-text"><strong>Size:</strong> 1.5 x 1.5 x 0.29 inches<br><strong>Listed range:</strong> 350 feet<br><strong>Tested range:</strong> 60 feet<br><strong>Water-resistance:</strong> IP68<br><strong>Battery: </strong>3-year, non-replaceable <br><strong>Colors:</strong> 8 color options</p></div></div><p>The Tile Mate often finds itself playing second fiddle to the Tile Pro in Tile's key finder lineup, but not so with the 2024 models. In fact, I'd go so far as to say that if you're looking for a Bluetooth-based tracker to help you pinpoint the location of any object, the Tile Mate 2024 is the <a href="https://www.tomsguide.com/us/best-key-finders,review-2657.html">best key finder</a> you can buy.</p><p>In part, that's a reflection of the <a href="https://www.tomsguide.com/tech/tile-pro-2024-review">current edition of the Tile Pro</a>, which felt like a step backward after I got done testing it. But it's also because of the superior value that the Tile Mate has to offer, delivering the same tracking tools, but at a lower price. My Tile Mate 2024 review explains why this is the tracker most people should get.</p><h3 class="article-body__section" id="section-tile-mate-review-price-and-availability"><span>Tile Mate review: Price and availability</span></h3><p>At $25, the Tile Mate joins the Tile Sticker as least expensive options in the Tile lineup. The Mate costs $10 less than the Tile Pro while sharing many of the same capabilities. It's also less expensive than both the Galaxy SmartTag 2 and Apple's AirTag, both of which cost $29. Unlike those two trackers, the Tile Mate works across both Android and iOS, connecting to a wide array of phones over Bluetooth.</p><p>The Tile Mate also offers more color options than the Tile Pro, which is only available in black and white. In contrast, you can pick from a variety of colors for your Tile Mate, including a two-tone design. For example, my review unit comes with a green front, with an aquamarine frame and backing.</p><h3 class="article-body__section" id="section-tile-mate-review-design-and-features"><span>Tile Mate review: Design and 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="nvVu5oVX45WwKQDnYomE2W" name="tile-mate-3.jpg" alt="Tile Mate 2024 key finder in green" src="https://cdn.mos.cms.futurecdn.net/nvVu5oVX45WwKQDnYomE2W.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Not much has changed with the look of the Tile Mate since the 2022 version. The part of the tracker where you latch on your keys is a little more subdued compared to the round circle of its predecessor, but that makes the device easier to attach in my opinion.</p><p>The Tile logo in the center of the tracker has been replaced by a Life360 logo, now that the location tracking and family security specialist has snapped up Tile. The new tracker also has a better IP68 water resistance rating, so it can survive a deeper dunk in water than the 2022 version.</p><p>Unlike the Tile Pro and its replaceable battery, the Tile Mate is completely sealed up. You use the tracker until it runs out of juice, which should be about three years after purchase. That's going to put off some people who prefer to repurpose their tech instead of constantly replacing it, but at least Tile trackers can be turned in to e-cycling facilities.</p><p>The basic feature set for the Tile Mate hasn't changed at all since the last version came out. You pair the tracker over Bluetooth to your phone using the <a href="https://play.google.com/store/apps/details?id=com.thetileapp.tile&hl=en_US" target="_blank" rel="nofollow">Android</a> or <a href="https://apps.apple.com/us/app/tile-find-lost-keys-phone/id664939913" target="_blank" rel="nofollow">iOS version of the Tile app</a>, and you can press a button in the app to sound an alarm on the tracker. That helps you track down your misplaced item if its in range, and if not, you can mark it as missing. That way, other Tile owners who pass by the item will be able to detect it and anonymously pass on its location to you.</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:59.79%;"><img id="asqg767mUuYdhuR6m34ibT" name="tile-mate-software-1" alt="Tile software showing Tile Mate 2024 controls" src="https://cdn.mos.cms.futurecdn.net/asqg767mUuYdhuR6m34ibT.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Pressing the middle of the Tile Mate twice makes your phone ring — a very helpful feature if you misplace your phone as often as I do. New to the 2024 version of the Tile Mate is the ability to set an SOS alert though the Life360 app; when you press the button on your Tile Mate, three times, an alert will be sent out to your Life360 contacts notifying them of your location. The feature includes the ability to cancel the alert within 15 seconds of that triple press.</p><p>Concerned parents may appreciate the addition of SOS alerts to Tile trackers, but the implementation is a bit limited. You can either set the tracker to buzz your phone or send an alert, but you can't do both. I wish I didn't have to choose.</p><p>As part of the Life360 integration, you can now manage Tile trackers like the Mate through the Life360 app (<a href="https://play.google.com/store/apps/details?id=com.life360.android.safetymapd&hl=en_US" target="_blank" rel="nofollow">Android</a>, <a href="https://apps.apple.com/us/app/life360-stay-connected-safe/id384830320" target="_blank" rel="nofollow">iOS</a>). But you can access those trackers and the SOS feature without having to upgrade from the free membership tier.</p><h3 class="article-body__section" id="section-tile-mate-review-performance"><span>Tile Mate review: Performance</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="bTY9wP6dWXbEdgZovq3P5P" name="tile-mate-2" alt="Tile Mate 2024 key finder in hand" src="https://cdn.mos.cms.futurecdn.net/bTY9wP6dWXbEdgZovq3P5P.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>When I test key finders, I head to an open space like a park, set down the tracker and walk away to see how far I can get before I lose the connection with my phone. The Tile Mate 2024 promises a 350-foot range, but across multiple tests, I feel well short of that distance.</p><p>In fact, the furtherest I could ever get from the Tile Mate was 60 feet before the app would warn me that I was out of range. While I never expect to reach the maximum range in these tests, I do think the Mate 2024's performance is short of what I've come to expect from Tile products historically, though it has been a consistent issue with the 2024 Tile models that I've tested, be it the Mate or the Pro.</p><p>If there's any consolation to be had from lackluster range, it's that you'll never have any problem hearing the 100-decibel alarm from that distance. And in the most common use case — trying to track down keys you've misplaced in your home — the Tile Mate will perform admirably. Across larger areas, though, I'd be a little less confident.</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:59.79%;"><img id="EtDDMhA4eywkQotMVPiTx7" name="tile-mate-software-2" alt="using Tile software to find location of tile mate key finder" src="https://cdn.mos.cms.futurecdn.net/EtDDMhA4eywkQotMVPiTx7.jpg" mos="" align="middle" fullscreen="" width="1920" height="1148" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>Tile continues to offer a $30/year Tile Premium subscription that adds features like alerts when you leave behind your tracker (and whatever valuable you've attached, too.) The alerts can be helpful, but they also appear on your phone after a delay — in my testing, I was a mile away by car when a Smart Alert appeared on my phone. That's not a terribly long gap, but I still believe you can skip the Premium subscription and still get a lot of use out of any Tile product.</p><p>It's also worth noting that the Tile Mate doesn't offer Ultra Wideband activity like trackers from Samsung and Apple do. (In fact, no Tile tracker currently has this feature.) That means you're missing out on the precision finding features you'd get with the SmartTag or AirTag, but in my experience, Tile's Bluetooth connectivity has met my key-finding needs.</p><h3 class="article-body__section" id="section-tile-mate-review-verdict"><span>Tile Mate review: Verdict</span></h3><p>Range issues with this iteration of the Tile Mate aside, I've found the Mate to be fairly dependable for tracking down the location of objects around my home. Its low price, colorful look and durability make it the optimal choice if you're looking at Tile's lineup of key finders and are trying to decide which one to buy.</p><p>The Tile Pro delivers a louder alarm and promises longer range (at least on paper). But those advantages don't account for the $10 price difference between it and the Mate. If you don't mind the non-replaceable battery powering the Tile Mate, it's the key finder you should attach to your keychain.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ LEGO Star Wars Day deals 2025 — sets I'd buy starting at $6 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/lego-star-wars-day-deals-2025-sets-id-buy-starting-at-usd6</link>
                                                                            <description>
                            <![CDATA[ Here are the best LEGO Star Wars Day deals 2025 you can get now, including new sets, free gifts with purchase and exclusive LEGO Insider savings for Star Wars Day. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pMgmDN8zLgBppFHkVRTL2A</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/QtjP9eK7DXjCjbzR6Qvt2i-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Sun, 04 May 2025 14:18:25 +0000</pubDate>                                                                                                                                <updated>Sun, 04 May 2025 14:30:58 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Kate Kozuch ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xAVUdx6Qtp3SzugnnfNYsL.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Kate Kozuch is a managing editor of social and video at Tom&#039;s Guide, where she&#039;s been with the team since 2019. She also reviews smartwatches, covers TVs, tests the latest audio products and dabbles in cooking appliances. Of course, that&#039;s not when she&#039;s working on building the &lt;a href=&quot;https://www.tomsguide.com/reference/smart-home-guide&quot;&gt;ultimate DIY smart home&lt;/a&gt;. She has conducted over 100 different product reviews across these categories, turning her findings into buying guides and face-offs. She also manages a number of gift guides on the site. Kate has a strong on-camera presence as well. She has appeared on Cheddar and Fox 5 NY to talk trending tech news. She is also regularly featured on the Tom&#039;s Guide YouTube channel, runs the &lt;a href=&quot;https://www.tiktok.com/@tomsguide?lang=en&quot;&gt;Tom&#039;s Guide TikTok account&lt;/a&gt; with over 350,000 followers, and features all the tech she&#039;s testing &lt;a href=&quot;https://www.instagram.com/katekozuch/&quot;&gt;on her Instagram&lt;/a&gt;. When she’s not filming tech videos, you can find her taking up a new sport, mastering the NYT Crossword or channeling her inner celebrity chef. Speaking of, be sure to ask her about the time Guy Fieri made her a margarita at CES, or when her video of Martha Stewart drinking a margarita went mega-viral. Clearly, Kate has a thing for culinary icons and margaritas.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/QtjP9eK7DXjCjbzR6Qvt2i-1280-80.png">
                                                            <media:credit><![CDATA[LEGO]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[LEGO Star Wars]]></media:description>                                                            <media:text><![CDATA[LEGO Star Wars]]></media:text>
                                <media:title type="plain"><![CDATA[LEGO Star Wars]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/QtjP9eK7DXjCjbzR6Qvt2i-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>There’s no holiday quite like Star Wars Day. Every year on May the 4th, fans across the galaxy celebrate their favorite franchise. For LEGO lovers, Star Wars Day deals are the ultimate excuse to grow their LEGO Star Wars collection. And for 2025, LEGO has gone in with exclusive offers, early set releases, and collectible gifts just for fans.</p><p>Right now, LEGO has special Star Wars Day deals exclusively for LEGO Insiders. Joining is completely free. <a href="https://www.lego.com/en-gb/insiders" target="_blank" rel="nofollow">You can sign up now by clicking this link</a>.</p><p>Insiders will get access to savings on select LEGO Star Wars sets, plus earn up to 4x points on certain items. There are also several free gifts with purchase if you spend $40 or more on LEGO.com between May 1–5. As if that wasn’t enough, several all-new LEGO Star Wars sets are launching just in time for the celebration.</p><p>Meanwhile, retailers like Amazon also have dozens of LEGO Star Wars sets on sale starting as low as $6. Below I've outlined everything you need to know about LEGO Star Wars Day deals and promotions.</p><h2 id="lego-star-wars-day-deals-quick-links">LEGO Star Wars Day deals quick links</h2><ul><li><strong>Captain Rex Y-Wing Microfighter:</strong><a href="https://www.amazon.com/LEGO-Star-Wars-Microfighter-Collectible/dp/B0CV2DXNBP" target="_blank" rel="nofollow"><strong> $6 @ Amazon</strong></a></li><li><strong>Luke Skywalker Rebel Pilot (NEW): </strong><a href="https://www.lego.com/en-us/product/luke-skywalker-rebel-pilot-40795" target="_blank" rel="nofollow"><strong>$9 @ LEGO</strong></a></li><li><strong>BARC Speeder Escape:</strong><a href="https://www.lego.com/en-us/product/barc-speeder-escape-75378" target="_blank" rel="nofollow"><strong> $23 @ LEGO</strong></a></li><li><strong>Revenge of the Sith Heroes & Villains (NEW): </strong><a href="https://www.lego.com/en-us/product/star-wars-40796-40796" target="_blank" rel="nofollow"><strong>$49 @ LEGO</strong></a></li><li><strong>Droideka:</strong><a href="https://www.lego.com/en-us/product/droideka-75381" target="_blank" rel="nofollow"><strong> $51 @ LEGO</strong></a></li><li><strong>The Mandalorian Helmet: </strong><a href="https://www.amazon.com/LEGO-Mandalorian-Creative-Building-Collectible/dp/B09JKZM4CM/" target="_blank" rel="nofollow"><strong>$55 @ Amazon</strong></a></li><li><strong>Brick-Built Star Wars Logo (NEW):</strong><a href="https://www.lego.com/en-us/product/brick-built-star-wars-logo-75407" target="_blank" rel="nofollow"><strong> $59 @ LEGO</strong></a></li><li><strong>Millennium Falcon: </strong><a href="https://www.amazon.com/LEGO-Star-Wars-Anniversary-Collectible/dp/B0CGY3ZB24/" target="_blank" rel="nofollow"><strong>$67 @ Amazon</strong></a></li><li><strong>Chopper (C1-10P) Astromech Droid (NEW): </strong><a href="https://www.lego.com/en-us/product/chopper-c1-10p-astromech-droid-75416" target="_blank" rel="nofollow"><strong>$99 @ LEGO</strong></a></li><li><strong>R2-D2: </strong><a href="https://www.amazon.com/LEGO-R2-D2-Collectible-Building-Pieces/dp/B08STSYGLS" target="_blank" rel="nofollow"><strong>$167 @ Amazon</strong></a></li><li><strong>Jango Fett's Firespray-Class Starship (NEW): </strong><a href="https://www.lego.com/en-us/product/star-wars-75409-75409" target="_blank" rel="nofollow"><strong>$299 @ LEGO</strong></a></li></ul><h3 class="article-body__section" id="section-lego-star-wars-day-new-sets"><span>LEGO Star Wars day new sets</span></h3><div class="product"><a data-dimension112="4e56bf0c-a531-4b41-bfcc-04ad3f6a52a9" data-action="Deal Block" data-label="Inspired by his iconic flight suit, the newest Luke Skywalker BrickHeadz is launching for Star Wars Day. For just $9, this small set is a great display for new and existing BrickHeadz collectors alike." data-dimension48="Inspired by his iconic flight suit, the newest Luke Skywalker BrickHeadz is launching for Star Wars Day. For just $9, this small set is a great display for new and existing BrickHeadz collectors alike." data-dimension25="$9" href="https://www.lego.com/en-us/product/luke-skywalker-rebel-pilot-40795" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1342px;"><p class="vanilla-image-block" style="padding-top:100.45%;"><img id="uUZJ9eBLPEKxMA3isKk22f" name="81dsPG1JP0L._AC_SL1500_ (1).jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/uUZJ9eBLPEKxMA3isKk22f.png" mos="" align="middle" fullscreen="" width="1342" height="1348" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Inspired by his iconic flight suit, the newest Luke Skywalker BrickHeadz is launching for Star Wars Day. For just $9, this small set is a great display for new and existing BrickHeadz collectors alike. <a class="view-deal button" href="https://www.lego.com/en-us/product/luke-skywalker-rebel-pilot-40795" target="_blank" rel="nofollow" data-dimension112="4e56bf0c-a531-4b41-bfcc-04ad3f6a52a9" data-action="Deal Block" data-label="Inspired by his iconic flight suit, the newest Luke Skywalker BrickHeadz is launching for Star Wars Day. For just $9, this small set is a great display for new and existing BrickHeadz collectors alike." data-dimension48="Inspired by his iconic flight suit, the newest Luke Skywalker BrickHeadz is launching for Star Wars Day. For just $9, this small set is a great display for new and existing BrickHeadz collectors alike." data-dimension25="$9">View Deal</a></p></div><div class="product"><a data-dimension112="325eda04-296f-4ea8-8218-9d1d0a8198af" data-action="Deal Block" data-label="Fans of "Star Wars Rebels" or "Ahsoka" on Disney Plus will love bringing the quirky droid Chopper to life in this 1,039-piece set. Chopper is posable and comes with a plaque like other LEGO Star Wars droid sets." data-dimension48="Fans of "Star Wars Rebels" or "Ahsoka" on Disney Plus will love bringing the quirky droid Chopper to life in this 1,039-piece set. Chopper is posable and comes with a plaque like other LEGO Star Wars droid sets." data-dimension25="$99" href="https://www.lego.com/en-us/product/chopper-c1-10p-astromech-droid-75416" 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:100.15%;"><img id="pQDRmbfUzBqUhSQ5Lwxyma" name="Screenshot 2024-04-30 at 1.58.03 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/pQDRmbfUzBqUhSQ5Lwxyma.png" mos="" align="middle" fullscreen="" width="1344" height="1346" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Fans of "Star Wars Rebels" or "Ahsoka" on Disney Plus will love bringing the quirky droid Chopper to life in this 1,039-piece set. Chopper is posable and comes with a plaque like other LEGO Star Wars droid sets.<a class="view-deal button" href="https://www.lego.com/en-us/product/chopper-c1-10p-astromech-droid-75416" target="_blank" rel="nofollow" data-dimension112="325eda04-296f-4ea8-8218-9d1d0a8198af" data-action="Deal Block" data-label="Fans of "Star Wars Rebels" or "Ahsoka" on Disney Plus will love bringing the quirky droid Chopper to life in this 1,039-piece set. Chopper is posable and comes with a plaque like other LEGO Star Wars droid sets." data-dimension48="Fans of "Star Wars Rebels" or "Ahsoka" on Disney Plus will love bringing the quirky droid Chopper to life in this 1,039-piece set. Chopper is posable and comes with a plaque like other LEGO Star Wars droid sets." data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="0881d34e-e0ba-4c40-b41a-794c74e191f9" data-action="Deal Block" data-label="In what might be one of the coolest LEGO Star Wars sets in years, this Brick-Built Star Wars Logo is an eye-catching display piece with a hidden Easter egg you'll have to build to discover." data-dimension48="In what might be one of the coolest LEGO Star Wars sets in years, this Brick-Built Star Wars Logo is an eye-catching display piece with a hidden Easter egg you'll have to build to discover." data-dimension25="$59" href="https://www.lego.com/en-us/product/brick-built-star-wars-logo-75407" 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:99.41%;"><img id="aWMV3AogxqqqNiL6JpvooL" name="Screenshot 2024-04-30 at 2.36.05 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aWMV3AogxqqqNiL6JpvooL.png" mos="" align="middle" fullscreen="" width="1356" height="1348" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>In what might be one of the coolest LEGO Star Wars sets in years, this Brick-Built Star Wars Logo is an eye-catching display piece with a hidden Easter egg you'll have to build to discover. <a class="view-deal button" href="https://www.lego.com/en-us/product/brick-built-star-wars-logo-75407" target="_blank" rel="nofollow" data-dimension112="0881d34e-e0ba-4c40-b41a-794c74e191f9" data-action="Deal Block" data-label="In what might be one of the coolest LEGO Star Wars sets in years, this Brick-Built Star Wars Logo is an eye-catching display piece with a hidden Easter egg you'll have to build to discover." data-dimension48="In what might be one of the coolest LEGO Star Wars sets in years, this Brick-Built Star Wars Logo is an eye-catching display piece with a hidden Easter egg you'll have to build to discover." data-dimension25="$59">View Deal</a></p></div><div class="product"><a data-dimension112="acd9d24e-50fe-4ff4-83b8-8c4c57d4e12e" data-action="Deal Block" data-label="Starting May 1, shop Jango Fett's Firespray-Class Starship, an epic 2,970-piece build that features Jango Fett and young Boba Fett minifigures. LEGO Insiders members will get a limited-edition Jango Fett's Starship keychain with purchase while supplies last." data-dimension48="Starting May 1, shop Jango Fett's Firespray-Class Starship, an epic 2,970-piece build that features Jango Fett and young Boba Fett minifigures. LEGO Insiders members will get a limited-edition Jango Fett's Starship keychain with purchase while supplies last." data-dimension25="$299" href="https://www.lego.com/en-us/product/star-wars-75409-75409" 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:101.04%;"><img id="5k7MASoqzn8N62S6Kr8JJi" name="Screenshot 2024-04-30 at 2.49.19 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/5k7MASoqzn8N62S6Kr8JJi.png" mos="" align="middle" fullscreen="" width="1344" height="1358" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Starting May 1, shop Jango Fett's Firespray-Class Starship, an epic 2,970-piece build that features Jango Fett and young Boba Fett minifigures. LEGO Insiders members will get a limited-edition Jango Fett's Starship keychain with purchase while supplies last. <a class="view-deal button" href="https://www.lego.com/en-us/product/star-wars-75409-75409" target="_blank" rel="nofollow" data-dimension112="acd9d24e-50fe-4ff4-83b8-8c4c57d4e12e" data-action="Deal Block" data-label="Starting May 1, shop Jango Fett's Firespray-Class Starship, an epic 2,970-piece build that features Jango Fett and young Boba Fett minifigures. LEGO Insiders members will get a limited-edition Jango Fett's Starship keychain with purchase while supplies last." data-dimension48="Starting May 1, shop Jango Fett's Firespray-Class Starship, an epic 2,970-piece build that features Jango Fett and young Boba Fett minifigures. LEGO Insiders members will get a limited-edition Jango Fett's Starship keychain with purchase while supplies last." data-dimension25="$299">View Deal</a></p></div><div class="product"><a data-dimension112="c185a79c-2823-4240-86a9-d96c486c793d" data-action="Deal Block" data-label="Jango Fett gets more recognition with a new addition to the LEGO Star Wars helmets collection. This 616-piece display set will be recognizable to any fans of "Star Wars: Attack of the Clones."" data-dimension48="Jango Fett gets more recognition with a new addition to the LEGO Star Wars helmets collection. This 616-piece display set will be recognizable to any fans of "Star Wars: Attack of the Clones."" data-dimension25="$69" href="https://www.lego.com/en-us/product/jango-fett-helmet-75408" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1346px;"><p class="vanilla-image-block" style="padding-top:99.85%;"><img id="NQyNcwi2kuxNWzgMcUmvwA" name="81PhO-kyPuL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/NQyNcwi2kuxNWzgMcUmvwA.png" mos="" align="middle" fullscreen="" width="1346" height="1344" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Jango Fett gets more recognition with a new addition to the LEGO Star Wars helmets collection. This 616-piece display set will be recognizable to any fans of "Star Wars: Attack of the Clones."<a class="view-deal button" href="https://www.lego.com/en-us/product/jango-fett-helmet-75408" target="_blank" rel="nofollow" data-dimension112="c185a79c-2823-4240-86a9-d96c486c793d" data-action="Deal Block" data-label="Jango Fett gets more recognition with a new addition to the LEGO Star Wars helmets collection. This 616-piece display set will be recognizable to any fans of "Star Wars: Attack of the Clones."" data-dimension48="Jango Fett gets more recognition with a new addition to the LEGO Star Wars helmets collection. This 616-piece display set will be recognizable to any fans of "Star Wars: Attack of the Clones."" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="8556d8b3-f450-46f2-9191-ca5beaf0c7e5" data-action="Deal Block" data-label="Lego dropped not one, but two new helmet sets for May the 4th. This one belongs to Kylo Ren from the most recent trilogy, paying respect to the 10th anniversary of "Star Wars: The Force Awakens."" data-dimension48="Lego dropped not one, but two new helmet sets for May the 4th. This one belongs to Kylo Ren from the most recent trilogy, paying respect to the 10th anniversary of "Star Wars: The Force Awakens."" data-dimension25="$69" href="https://www.lego.com/en-us/product/star-wars-75415-75415" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1338px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="KKnKf3oyUwnmRPbtwxPBgS" name="81XzEmEudoL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/KKnKf3oyUwnmRPbtwxPBgS.png" mos="" align="middle" fullscreen="" width="1338" height="1338" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Lego dropped not one, but two new helmet sets for May the 4th. This one belongs to Kylo Ren from the most recent trilogy, paying respect to the 10th anniversary of "Star Wars: The Force Awakens." <a class="view-deal button" href="https://www.lego.com/en-us/product/star-wars-75415-75415" target="_blank" rel="nofollow" data-dimension112="8556d8b3-f450-46f2-9191-ca5beaf0c7e5" data-action="Deal Block" data-label="Lego dropped not one, but two new helmet sets for May the 4th. This one belongs to Kylo Ren from the most recent trilogy, paying respect to the 10th anniversary of "Star Wars: The Force Awakens."" data-dimension48="Lego dropped not one, but two new helmet sets for May the 4th. This one belongs to Kylo Ren from the most recent trilogy, paying respect to the 10th anniversary of "Star Wars: The Force Awakens."" data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="8059ef4c-34b9-4f04-941b-8438182c7565" data-action="Deal Block" data-label="Pair Kylo Ren's helmet with his 386-piece Command Shuttle. This is a smaller, more affordable version of a large-scale version that launched several years ago. With adjustable wings, this is a great display set for fans." data-dimension48="Pair Kylo Ren's helmet with his 386-piece Command Shuttle. This is a smaller, more affordable version of a large-scale version that launched several years ago. With adjustable wings, this is a great display set for fans." data-dimension25="$69" href="https://www.lego.com/en-us/product/star-wars-75406-75406" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1792px;"><p class="vanilla-image-block" style="padding-top:75.11%;"><img id="9nJNh3oPqB7hy6Lg9CvYrc" name="Kylo Ren ship_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9nJNh3oPqB7hy6Lg9CvYrc.png" mos="" align="middle" fullscreen="" width="1792" height="1346" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Pair Kylo Ren's helmet with his 386-piece Command Shuttle. This is a smaller, more affordable version of a large-scale version that launched several years ago. With adjustable wings, this is a great display set for fans.<a class="view-deal button" href="https://www.lego.com/en-us/product/star-wars-75406-75406" target="_blank" rel="nofollow" data-dimension112="8059ef4c-34b9-4f04-941b-8438182c7565" data-action="Deal Block" data-label="Pair Kylo Ren's helmet with his 386-piece Command Shuttle. This is a smaller, more affordable version of a large-scale version that launched several years ago. With adjustable wings, this is a great display set for fans." data-dimension48="Pair Kylo Ren's helmet with his 386-piece Command Shuttle. This is a smaller, more affordable version of a large-scale version that launched several years ago. With adjustable wings, this is a great display set for fans." data-dimension25="$69">View Deal</a></p></div><div class="product"><a data-dimension112="e40499d4-2ce0-4acf-911e-ca2b2a86a795" data-action="Deal Block" data-label="If there's one set I'm getting for Star Wars Day, it's this BrickHeadz collection of heroes and villains from "Star Wars: Revenge of the Sith." Featuring Anakin Skywalker, Padmé Amidala, General Grievous, Mace Windu and Emperor Palpatine, this is one you don't want to miss." data-dimension48="If there's one set I'm getting for Star Wars Day, it's this BrickHeadz collection of heroes and villains from "Star Wars: Revenge of the Sith." Featuring Anakin Skywalker, Padmé Amidala, General Grievous, Mace Windu and Emperor Palpatine, this is one you don't want to miss." data-dimension25="$49" href="https://www.lego.com/en-us/product/star-wars-40796-40796" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1342px;"><p class="vanilla-image-block" style="padding-top:99.25%;"><img id="dfnZiCWwpYcZraSd7pAboB" name="81dsPG1JP0L._AC_SL1500_ (1).jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/dfnZiCWwpYcZraSd7pAboB.png" mos="" align="middle" fullscreen="" width="1342" height="1332" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>If there's one set I'm getting for Star Wars Day, it's this BrickHeadz collection of heroes and villains from "Star Wars: Revenge of the Sith." Featuring Anakin Skywalker, Padmé Amidala, General Grievous, Mace Windu and Emperor Palpatine, this is one you don't want to miss. <a class="view-deal button" href="https://www.lego.com/en-us/product/star-wars-40796-40796" target="_blank" rel="nofollow" data-dimension112="e40499d4-2ce0-4acf-911e-ca2b2a86a795" data-action="Deal Block" data-label="If there's one set I'm getting for Star Wars Day, it's this BrickHeadz collection of heroes and villains from "Star Wars: Revenge of the Sith." Featuring Anakin Skywalker, Padmé Amidala, General Grievous, Mace Windu and Emperor Palpatine, this is one you don't want to miss." data-dimension48="If there's one set I'm getting for Star Wars Day, it's this BrickHeadz collection of heroes and villains from "Star Wars: Revenge of the Sith." Featuring Anakin Skywalker, Padmé Amidala, General Grievous, Mace Windu and Emperor Palpatine, this is one you don't want to miss." data-dimension25="$49">View Deal</a></p></div><h3 class="article-body__section" id="section-lego-star-wars-day-deals"><span>LEGO Star Wars Day deals</span></h3><div class="product"><a data-dimension112="15abec64-1f5b-4566-9e1e-8d8e58e3224c" data-action="Deal Block" data-label="This fun little 99-piece kit features Captain Rex from "The Clone Wars" along with a miniature-size Y-Wing fighter that has two stud shooters, so you (or your kid) can really pretend to be battling the separatists." data-dimension48="This fun little 99-piece kit features Captain Rex from "The Clone Wars" along with a miniature-size Y-Wing fighter that has two stud shooters, so you (or your kid) can really pretend to be battling the separatists." data-dimension25="$6" href="https://www.amazon.com/LEGO-Star-Wars-Microfighter-Collectible/dp/B0CV2DXNBP" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1088px;"><p class="vanilla-image-block" style="padding-top:89.98%;"><img id="ik82aRNDcfcxccAavMETL5" name="Screenshot 2024-11-21 at 1.11.23 PM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ik82aRNDcfcxccAavMETL5.png" mos="" align="middle" fullscreen="" width="1088" height="979" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This fun little 99-piece kit features Captain Rex from "The Clone Wars" along with a miniature-size Y-Wing fighter that has two stud shooters, so you (or your kid) can really pretend to be battling the separatists.<a class="view-deal button" href="https://www.amazon.com/LEGO-Star-Wars-Microfighter-Collectible/dp/B0CV2DXNBP" target="_blank" rel="nofollow" data-dimension112="15abec64-1f5b-4566-9e1e-8d8e58e3224c" data-action="Deal Block" data-label="This fun little 99-piece kit features Captain Rex from "The Clone Wars" along with a miniature-size Y-Wing fighter that has two stud shooters, so you (or your kid) can really pretend to be battling the separatists." data-dimension48="This fun little 99-piece kit features Captain Rex from "The Clone Wars" along with a miniature-size Y-Wing fighter that has two stud shooters, so you (or your kid) can really pretend to be battling the separatists." data-dimension25="$6">View Deal</a></p></div><div class="product"><a data-dimension112="b8948701-fdb2-45a8-8371-0b5fa1f1c225" data-action="Deal Block" data-label="Right now you can shop LEGO Star Wars deals on Amazon, including this mid-size Millennium Falcon starship that celebrates the 25th anniversary of the LEGO Star Wars franchise. This 921-piece set is great for memorabilia collectors." data-dimension48="Right now you can shop LEGO Star Wars deals on Amazon, including this mid-size Millennium Falcon starship that celebrates the 25th anniversary of the LEGO Star Wars franchise. This 921-piece set is great for memorabilia collectors." data-dimension25="$67" href="https://www.amazon.com/LEGO-Star-Wars-Anniversary-Collectible/dp/B0CGY3ZB24/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1114px;"><p class="vanilla-image-block" style="padding-top:84.20%;"><img id="eoP9bLh54nkNEnYVs6SWFB" name="81PhO-kyPuL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/eoP9bLh54nkNEnYVs6SWFB.png" mos="" align="middle" fullscreen="" width="1114" height="938" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Right now you can shop LEGO Star Wars deals on Amazon, including this mid-size Millennium Falcon starship that celebrates the 25th anniversary of the LEGO Star Wars franchise. This 921-piece set is great for memorabilia collectors.<a class="view-deal button" href="https://www.amazon.com/LEGO-Star-Wars-Anniversary-Collectible/dp/B0CGY3ZB24/" target="_blank" rel="nofollow" data-dimension112="b8948701-fdb2-45a8-8371-0b5fa1f1c225" data-action="Deal Block" data-label="Right now you can shop LEGO Star Wars deals on Amazon, including this mid-size Millennium Falcon starship that celebrates the 25th anniversary of the LEGO Star Wars franchise. This 921-piece set is great for memorabilia collectors." data-dimension48="Right now you can shop LEGO Star Wars deals on Amazon, including this mid-size Millennium Falcon starship that celebrates the 25th anniversary of the LEGO Star Wars franchise. This 921-piece set is great for memorabilia collectors." data-dimension25="$67">View Deal</a></p></div><div class="product"><a data-dimension112="b2a10e09-8940-4e01-bbf1-72a5a5356306" data-action="Deal Block" data-label="Everyone's favorite Star Wars droid, more affectionately known as "Artoo," measures over 12 inches tall in this 2,315-piece LEGO set. A rotating head and rising periscope are just some of the elements that make this a must-have set for fans, and right now it's on a rare sale." data-dimension48="Everyone's favorite Star Wars droid, more affectionately known as "Artoo," measures over 12 inches tall in this 2,315-piece LEGO set. A rotating head and rising periscope are just some of the elements that make this a must-have set for fans, and right now it's on a rare sale." data-dimension25="$167" href="https://www.amazon.com/LEGO-R2-D2-Collectible-Building-Pieces/dp/B08STSYGLS" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1114px;"><p class="vanilla-image-block" style="padding-top:90.66%;"><img id="ycuSgqLwRw6B5biC2pqkWH" name="Screenshot 2025-05-04 at 9.25.13 AM" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/ycuSgqLwRw6B5biC2pqkWH.png" mos="" align="middle" fullscreen="" width="1114" height="1010" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Everyone's favorite Star Wars droid, more affectionately known as "Artoo," measures over 12 inches tall in this 2,315-piece LEGO set. A rotating head and rising periscope are just some of the elements that make this a must-have set for fans, and right now it's on a rare sale.<a class="view-deal button" href="https://www.amazon.com/LEGO-R2-D2-Collectible-Building-Pieces/dp/B08STSYGLS" target="_blank" rel="nofollow" data-dimension112="b2a10e09-8940-4e01-bbf1-72a5a5356306" data-action="Deal Block" data-label="Everyone's favorite Star Wars droid, more affectionately known as "Artoo," measures over 12 inches tall in this 2,315-piece LEGO set. A rotating head and rising periscope are just some of the elements that make this a must-have set for fans, and right now it's on a rare sale." data-dimension48="Everyone's favorite Star Wars droid, more affectionately known as "Artoo," measures over 12 inches tall in this 2,315-piece LEGO set. A rotating head and rising periscope are just some of the elements that make this a must-have set for fans, and right now it's on a rare sale." data-dimension25="$167">View Deal</a></p></div><div class="product"><a data-dimension112="e4dd56ed-b385-4495-9872-d2cde8cea507" data-action="Deal Block" data-label=""The Mandalorian" fans will love this BARC Speeder Escape set, inspired by the throwback scene in which Kelleran Beq helps Grogu evade Clone Trooper capture at the Jedi Temple on Coruscant." data-dimension48=""The Mandalorian" fans will love this BARC Speeder Escape set, inspired by the throwback scene in which Kelleran Beq helps Grogu evade Clone Trooper capture at the Jedi Temple on Coruscant." data-dimension25="$23" href="https://www.lego.com/en-us/product/barc-speeder-escape-75378" 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:93.11%;"><img id="3V4EPx6BJTSLvhzsyo4oNM" name="Screenshot 2024-04-30 at 1.52.17 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/3V4EPx6BJTSLvhzsyo4oNM.png" mos="" align="middle" fullscreen="" width="784" height="730" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>"The Mandalorian" fans will love this BARC Speeder Escape set, inspired by the throwback scene in which Kelleran Beq helps Grogu evade Clone Trooper capture at the Jedi Temple on Coruscant.<a class="view-deal button" href="https://www.lego.com/en-us/product/barc-speeder-escape-75378" target="_blank" rel="nofollow" data-dimension112="e4dd56ed-b385-4495-9872-d2cde8cea507" data-action="Deal Block" data-label=""The Mandalorian" fans will love this BARC Speeder Escape set, inspired by the throwback scene in which Kelleran Beq helps Grogu evade Clone Trooper capture at the Jedi Temple on Coruscant." data-dimension48=""The Mandalorian" fans will love this BARC Speeder Escape set, inspired by the throwback scene in which Kelleran Beq helps Grogu evade Clone Trooper capture at the Jedi Temple on Coruscant." data-dimension25="$23">View Deal</a></p></div><div class="product"><a data-dimension112="f6102c76-a2f2-4a95-99de-1e82bfb24516" data-action="Deal Block" data-label="This collectible figures set comes with BrickHeadz inspired by "The Phantom Menace's" most memorable characters, including  Jar Jar Binks, Anakin Skywalker, Queen Amidala, Captain Panaka, Qui-Gon Jinn, and Darth Maul. At $37, this is one of the best deals on BrickHeadz I've ever seen." data-dimension48="This collectible figures set comes with BrickHeadz inspired by "The Phantom Menace's" most memorable characters, including  Jar Jar Binks, Anakin Skywalker, Queen Amidala, Captain Panaka, Qui-Gon Jinn, and Darth Maul. At $37, this is one of the best deals on BrickHeadz I've ever seen." data-dimension25="$37" href="https://www.amazon.com/LEGO-Star-Wars-40676-Anniversary/dp/B0D386HWT9" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:811px;"><p class="vanilla-image-block" style="padding-top:86.93%;"><img id="4myui33scoSPW8NR9keRi7" name="Screenshot 2024-04-30 at 1.50.00 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/4myui33scoSPW8NR9keRi7.png" mos="" align="middle" fullscreen="" width="811" height="705" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This collectible figures set comes with BrickHeadz inspired by "The Phantom Menace's" most memorable characters, including  Jar Jar Binks, Anakin Skywalker, Queen Amidala, Captain Panaka, Qui-Gon Jinn, and Darth Maul. At $37, this is one of the best deals on BrickHeadz I've ever seen.<a class="view-deal button" href="https://www.amazon.com/LEGO-Star-Wars-40676-Anniversary/dp/B0D386HWT9" target="_blank" rel="nofollow" data-dimension112="f6102c76-a2f2-4a95-99de-1e82bfb24516" data-action="Deal Block" data-label="This collectible figures set comes with BrickHeadz inspired by "The Phantom Menace's" most memorable characters, including  Jar Jar Binks, Anakin Skywalker, Queen Amidala, Captain Panaka, Qui-Gon Jinn, and Darth Maul. At $37, this is one of the best deals on BrickHeadz I've ever seen." data-dimension48="This collectible figures set comes with BrickHeadz inspired by "The Phantom Menace's" most memorable characters, including  Jar Jar Binks, Anakin Skywalker, Queen Amidala, Captain Panaka, Qui-Gon Jinn, and Darth Maul. At $37, this is one of the best deals on BrickHeadz I've ever seen." data-dimension25="$37">View Deal</a></p></div><div class="product"><a data-dimension112="f6d01981-75a0-4cd7-b136-44051d5bcbe8" data-action="Deal Block" data-label="Another epic Star Wars spaceship build is on sale directly from LEGO. Ahsoka's Jedi Interceptor Spaceship has movable wings, spring-loaded blasters, and comes with minifigures of Ahsoka Tano, Anakin Skywalker and R7-A7." data-dimension48="Another epic Star Wars spaceship build is on sale directly from LEGO. Ahsoka's Jedi Interceptor Spaceship has movable wings, spring-loaded blasters, and comes with minifigures of Ahsoka Tano, Anakin Skywalker and R7-A7." data-dimension25="$38" href="https://www.lego.com/en-us/product/ahsokas-jedi-interceptor-75401" 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:97.87%;"><img id="JkdFwgv5SddL3kZoCgQ5sd" name="81fuSOfh11L._AC_SL1500_" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/JkdFwgv5SddL3kZoCgQ5sd.jpg" mos="" align="middle" fullscreen="" width="1500" height="1468" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Another epic Star Wars spaceship build is on sale directly from LEGO. Ahsoka's Jedi Interceptor Spaceship has movable wings, spring-loaded blasters, and comes with minifigures of Ahsoka Tano, Anakin Skywalker and R7-A7.<a class="view-deal button" href="https://www.lego.com/en-us/product/ahsokas-jedi-interceptor-75401" target="_blank" rel="nofollow" data-dimension112="f6d01981-75a0-4cd7-b136-44051d5bcbe8" data-action="Deal Block" data-label="Another epic Star Wars spaceship build is on sale directly from LEGO. Ahsoka's Jedi Interceptor Spaceship has movable wings, spring-loaded blasters, and comes with minifigures of Ahsoka Tano, Anakin Skywalker and R7-A7." data-dimension48="Another epic Star Wars spaceship build is on sale directly from LEGO. Ahsoka's Jedi Interceptor Spaceship has movable wings, spring-loaded blasters, and comes with minifigures of Ahsoka Tano, Anakin Skywalker and R7-A7." data-dimension25="$38">View Deal</a></p></div><div class="product"><a data-dimension112="dc8a9813-b62f-4f79-98ed-406ec8807f6e" data-action="Deal Block" data-label="This buildable model kit captures Anakin Skywalker's iconic podrace scene, even featuring Sebulba's podracer. But the best part? It comes with a plaque stating Qui-Gon Jinn’s advice: “Remember. Concentrate on the moment. Feel. Don't think. Trust your instincts.”" data-dimension48="This buildable model kit captures Anakin Skywalker's iconic podrace scene, even featuring Sebulba's podracer. But the best part? It comes with a plaque stating Qui-Gon Jinn’s advice: “Remember. Concentrate on the moment. Feel. Don't think. Trust your instincts.”" data-dimension25="$55" href="https://www.amazon.com/LEGO-Star-Wars-Micro-Scale-Skywalkers/dp/B0CPQ52PMG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:858px;"><p class="vanilla-image-block" style="padding-top:84.38%;"><img id="R7krqPPs4cMUSytPtXwUah" name="Screenshot 2024-04-30 at 1.40.56 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R7krqPPs4cMUSytPtXwUah.png" mos="" align="middle" fullscreen="" width="858" height="724" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This buildable model kit captures Anakin Skywalker's iconic podrace scene, even featuring Sebulba's podracer. But the best part? It comes with a plaque stating Qui-Gon Jinn’s advice: “Remember. Concentrate on the moment. Feel. Don't think. Trust your instincts.”<a class="view-deal button" href="https://www.amazon.com/LEGO-Star-Wars-Micro-Scale-Skywalkers/dp/B0CPQ52PMG" target="_blank" rel="nofollow" data-dimension112="dc8a9813-b62f-4f79-98ed-406ec8807f6e" data-action="Deal Block" data-label="This buildable model kit captures Anakin Skywalker's iconic podrace scene, even featuring Sebulba's podracer. But the best part? It comes with a plaque stating Qui-Gon Jinn’s advice: “Remember. Concentrate on the moment. Feel. Don't think. Trust your instincts.”" data-dimension48="This buildable model kit captures Anakin Skywalker's iconic podrace scene, even featuring Sebulba's podracer. But the best part? It comes with a plaque stating Qui-Gon Jinn’s advice: “Remember. Concentrate on the moment. Feel. Don't think. Trust your instincts.”" data-dimension25="$55">View Deal</a></p></div><div class="product"><a data-dimension112="ed404055-f463-4ed6-93a8-659d79e1a487" data-action="Deal Block" data-label="This 583-piece collectible LEGO droid figure, inspired by "The Phantom Menace" and "The Clone Wars," can transform into the iconic ball shape. It also comes with a special LEGO Star Wars 25th anniversary brick for the display stand." data-dimension48="This 583-piece collectible LEGO droid figure, inspired by "The Phantom Menace" and "The Clone Wars," can transform into the iconic ball shape. It also comes with a special LEGO Star Wars 25th anniversary brick for the display stand." data-dimension25="$51" href="https://www.lego.com/en-us/product/droideka-75381" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:985px;"><p class="vanilla-image-block" style="padding-top:75.33%;"><img id="iSi66UVjTLvssD5vE9GMv3" name="Screenshot 2024-04-30 at 1.35.10 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iSi66UVjTLvssD5vE9GMv3.png" mos="" align="middle" fullscreen="" width="985" height="742" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This 583-piece collectible LEGO droid figure, inspired by "The Phantom Menace" and "The Clone Wars," can transform into the iconic ball shape. It also comes with a special LEGO Star Wars 25th anniversary brick for the display stand.<a class="view-deal button" href="https://www.lego.com/en-us/product/droideka-75381" target="_blank" rel="nofollow" data-dimension112="ed404055-f463-4ed6-93a8-659d79e1a487" data-action="Deal Block" data-label="This 583-piece collectible LEGO droid figure, inspired by "The Phantom Menace" and "The Clone Wars," can transform into the iconic ball shape. It also comes with a special LEGO Star Wars 25th anniversary brick for the display stand." data-dimension48="This 583-piece collectible LEGO droid figure, inspired by "The Phantom Menace" and "The Clone Wars," can transform into the iconic ball shape. It also comes with a special LEGO Star Wars 25th anniversary brick for the display stand." data-dimension25="$51">View Deal</a></p></div><div class="product"><a data-dimension112="69e05310-996a-48f6-93f7-9cc34de31965" data-action="Deal Block" data-label="This Lego Star Wars Obi-Wan Kenobi’s Jedi Starfighter set comes with 282 pieces and two mini-figures. It even features a retractable landing gear. Get it on sale at Amazon thanks to May the 4th deals." data-dimension48="This Lego Star Wars Obi-Wan Kenobi’s Jedi Starfighter set comes with 282 pieces and two mini-figures. It even features a retractable landing gear. Get it on sale at Amazon thanks to May the 4th deals." data-dimension25="$23" href="https://www.amazon.com/LEGO-OBI-Wan-Kenobis-Starfighter-Building/dp/B09TC1BMBW" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1474px;"><p class="vanilla-image-block" style="padding-top:101.76%;"><img id="R6WQPFCDtVuLpesiKfiihe" name="81dsPG1JP0L._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/R6WQPFCDtVuLpesiKfiihe.jpg" mos="" align="middle" fullscreen="" width="1474" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This Lego Star Wars Obi-Wan Kenobi’s Jedi Starfighter set comes with 282 pieces and two mini-figures. It even features a retractable landing gear. Get it on sale at Amazon thanks to May the 4th deals.<a class="view-deal button" href="https://www.amazon.com/LEGO-OBI-Wan-Kenobis-Starfighter-Building/dp/B09TC1BMBW" target="_blank" rel="nofollow" data-dimension112="69e05310-996a-48f6-93f7-9cc34de31965" data-action="Deal Block" data-label="This Lego Star Wars Obi-Wan Kenobi’s Jedi Starfighter set comes with 282 pieces and two mini-figures. It even features a retractable landing gear. Get it on sale at Amazon thanks to May the 4th deals." data-dimension48="This Lego Star Wars Obi-Wan Kenobi’s Jedi Starfighter set comes with 282 pieces and two mini-figures. It even features a retractable landing gear. Get it on sale at Amazon thanks to May the 4th deals." data-dimension25="$23">View Deal</a></p></div><div class="product"><a data-dimension112="317cac72-3c48-4f72-be40-af01b7c9c3b8" data-action="Deal Block" data-label="Everyone's favorite Wookiee stands over 18 inches tall in this build-and-display style figure. The 2319-piece set even comes with Chewbacca's iconic bowcaster (complete with stud-shooting functionality)." data-dimension48="Everyone's favorite Wookiee stands over 18 inches tall in this build-and-display style figure. The 2319-piece set even comes with Chewbacca's iconic bowcaster (complete with stud-shooting functionality)." data-dimension25="$173" href="https://www.amazon.com/LEGO-Chewbacca-Buildable-Collectible-Original/dp/B0BXQ4ZGQM" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:658px;"><p class="vanilla-image-block" style="padding-top:108.66%;"><img id="iyorUZZdspxKihsqTBLZ8C" name="Screenshot 2024-04-30 at 1.58.03 PM.png" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iyorUZZdspxKihsqTBLZ8C.png" mos="" align="middle" fullscreen="" width="658" height="715" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Everyone's favorite Wookiee stands over 18 inches tall in this build-and-display style figure. The 2319-piece set even comes with Chewbacca's iconic bowcaster (complete with stud-shooting functionality). <a class="view-deal button" href="https://www.amazon.com/LEGO-Chewbacca-Buildable-Collectible-Original/dp/B0BXQ4ZGQM" target="_blank" rel="nofollow" data-dimension112="317cac72-3c48-4f72-be40-af01b7c9c3b8" data-action="Deal Block" data-label="Everyone's favorite Wookiee stands over 18 inches tall in this build-and-display style figure. The 2319-piece set even comes with Chewbacca's iconic bowcaster (complete with stud-shooting functionality)." data-dimension48="Everyone's favorite Wookiee stands over 18 inches tall in this build-and-display style figure. The 2319-piece set even comes with Chewbacca's iconic bowcaster (complete with stud-shooting functionality)." data-dimension25="$173">View Deal</a></p></div><div class="product"><a data-dimension112="77d74733-5843-42b6-834f-9848862369f1" data-action="Deal Block" data-label="This 625-piece TIE Bomber build looks pulled straight from "The Empire Strikes Back." It comes with Darth Vader, Vice Admiral Sloane and TIE Bomber Pilot minifigures, as well as a Gonk droid." data-dimension48="This 625-piece TIE Bomber build looks pulled straight from "The Empire Strikes Back." It comes with Darth Vader, Vice Admiral Sloane and TIE Bomber Pilot minifigures, as well as a Gonk droid." data-dimension25="$51" href="https://www.amazon.com/LEGO-Starfighter-Minifigure-Lightsaber-Collectable/dp/B0BBY1B8GL" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1476px;"><p class="vanilla-image-block" style="padding-top:101.63%;"><img id="aQK7guAUaQGgefNzvSELL6" name="81XzEmEudoL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/aQK7guAUaQGgefNzvSELL6.jpg" mos="" align="middle" fullscreen="" width="1476" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This 625-piece TIE Bomber build looks pulled straight from "The Empire Strikes Back." It comes with Darth Vader, Vice Admiral Sloane and TIE Bomber Pilot minifigures, as well as a Gonk droid.<a class="view-deal button" href="https://www.amazon.com/LEGO-Starfighter-Minifigure-Lightsaber-Collectable/dp/B0BBY1B8GL" target="_blank" rel="nofollow" data-dimension112="77d74733-5843-42b6-834f-9848862369f1" data-action="Deal Block" data-label="This 625-piece TIE Bomber build looks pulled straight from "The Empire Strikes Back." It comes with Darth Vader, Vice Admiral Sloane and TIE Bomber Pilot minifigures, as well as a Gonk droid." data-dimension48="This 625-piece TIE Bomber build looks pulled straight from "The Empire Strikes Back." It comes with Darth Vader, Vice Admiral Sloane and TIE Bomber Pilot minifigures, as well as a Gonk droid." data-dimension25="$51">View Deal</a></p></div><div class="product"><a data-dimension112="460a8653-68d7-47e9-8026-97a029e94b00" data-action="Deal Block" data-label="This is the way. The Lego Star Wars The Mandalorian Helmet plays an iconic role in the Disney Plus series, and now you can build a 584-piece replica at home. Get it while it's on sale now during Star Wars Day festivities." data-dimension48="This is the way. The Lego Star Wars The Mandalorian Helmet plays an iconic role in the Disney Plus series, and now you can build a 584-piece replica at home. Get it while it's on sale now during Star Wars Day festivities." data-dimension25="$55" href="https://www.amazon.com/LEGO-Mandalorian-Creative-Building-Collectible/dp/B09JKZM4CM/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1489px;"><p class="vanilla-image-block" style="padding-top:100.74%;"><img id="STw87FYU3rfgQUfLpgokEK" name="815jsmzTHsL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/STw87FYU3rfgQUfLpgokEK.jpg" mos="" align="middle" fullscreen="" width="1489" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This is the way. The Lego Star Wars The Mandalorian Helmet plays an iconic role in the Disney Plus series, and now you can build a 584-piece replica at home. Get it while it's on sale now during Star Wars Day festivities.<a class="view-deal button" href="https://www.amazon.com/LEGO-Mandalorian-Creative-Building-Collectible/dp/B09JKZM4CM/" target="_blank" rel="nofollow" data-dimension112="460a8653-68d7-47e9-8026-97a029e94b00" data-action="Deal Block" data-label="This is the way. The Lego Star Wars The Mandalorian Helmet plays an iconic role in the Disney Plus series, and now you can build a 584-piece replica at home. Get it while it's on sale now during Star Wars Day festivities." data-dimension48="This is the way. The Lego Star Wars The Mandalorian Helmet plays an iconic role in the Disney Plus series, and now you can build a 584-piece replica at home. Get it while it's on sale now during Star Wars Day festivities." data-dimension25="$55">View Deal</a></p></div><div class="product"><a data-dimension112="fd551fa5-c752-453e-aee1-34521aa3e2e1" data-action="Deal Block" data-label="The LEGO Star Wars Darth Vader Helmet is on sale for Star Wars Day deals. It depicts in close detail the menacing Darth Vader helmet. It's perfect for fans of the dark side." data-dimension48="The LEGO Star Wars Darth Vader Helmet is on sale for Star Wars Day deals. It depicts in close detail the menacing Darth Vader helmet. It's perfect for fans of the dark side." data-dimension25="$63" href="https://www.amazon.com/LEGO-Helmet-Collectible-Building-Pieces/dp/B08NFCW4WY/" 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.93%;"><img id="gUUZSQiTiMHoPrkBuXPNVV" name="81ooogrOCEL._AC_SL1500_.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/gUUZSQiTiMHoPrkBuXPNVV.jpg" mos="" align="middle" fullscreen="" width="1500" height="1484" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The LEGO Star Wars Darth Vader Helmet is on sale for Star Wars Day deals. It depicts in close detail the menacing Darth Vader helmet. It's perfect for fans of the dark side.<a class="view-deal button" href="https://www.amazon.com/LEGO-Helmet-Collectible-Building-Pieces/dp/B08NFCW4WY/" target="_blank" rel="nofollow" data-dimension112="fd551fa5-c752-453e-aee1-34521aa3e2e1" data-action="Deal Block" data-label="The LEGO Star Wars Darth Vader Helmet is on sale for Star Wars Day deals. It depicts in close detail the menacing Darth Vader helmet. It's perfect for fans of the dark side." data-dimension48="The LEGO Star Wars Darth Vader Helmet is on sale for Star Wars Day deals. It depicts in close detail the menacing Darth Vader helmet. It's perfect for fans of the dark side." data-dimension25="$63">View Deal</a></p></div><div class="product"><a data-dimension112="2ba2f5b1-99bd-4a97-8a84-f528a91c5961" data-action="Deal Block" data-label="With this beginner-friendly 282-piece StarFighter set, young padawans can relive "Attack of the Clones" scenes. It comes with Obi-Wan Kenobi and Taun We minifigures, plus an R4-P17 LEGO astromech droid figure." data-dimension48="With this beginner-friendly 282-piece StarFighter set, young padawans can relive "Attack of the Clones" scenes. It comes with Obi-Wan Kenobi and Taun We minifigures, plus an R4-P17 LEGO astromech droid figure." data-dimension25="$23" href="https://www.amazon.com/LEGO-OBI-Wan-Kenobis-Starfighter-Building/dp/B09TC1BMBW/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1474px;"><p class="vanilla-image-block" style="padding-top:101.76%;"><img id="9FDcdouuKZQdMn6ybmKVzS" name="81dsPG1JP0L._AC_SL1500_ (1).jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/9FDcdouuKZQdMn6ybmKVzS.jpg" mos="" align="middle" fullscreen="" width="1474" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>With this beginner-friendly 282-piece StarFighter set, young padawans can relive "Attack of the Clones" scenes. It comes with Obi-Wan Kenobi and Taun We minifigures, plus an R4-P17 LEGO astromech droid figure.<a class="view-deal button" href="https://www.amazon.com/LEGO-OBI-Wan-Kenobis-Starfighter-Building/dp/B09TC1BMBW/" target="_blank" rel="nofollow" data-dimension112="2ba2f5b1-99bd-4a97-8a84-f528a91c5961" data-action="Deal Block" data-label="With this beginner-friendly 282-piece StarFighter set, young padawans can relive "Attack of the Clones" scenes. It comes with Obi-Wan Kenobi and Taun We minifigures, plus an R4-P17 LEGO astromech droid figure." data-dimension48="With this beginner-friendly 282-piece StarFighter set, young padawans can relive "Attack of the Clones" scenes. It comes with Obi-Wan Kenobi and Taun We minifigures, plus an R4-P17 LEGO astromech droid figure." data-dimension25="$23">View Deal</a></p></div><h3 class="article-body__section" id="section-lego-star-wars-day-free-gift-with-purchase"><span>LEGO Star Wars Day Free Gift with Purchase</span></h3><p>When you shop LEGO Star Wars sets at LEGO.com, you'll be eligible for free gifts that you can't currently purchase otherwise. For collectors, these freebies are a can't-miss. It's important to note that you must make your purchase directly from LEGO, as third-party retailers like Amazon don't carry these gifts.</p><p>If you spend $160 on LEGO Star Wars sets, you'll get the <a href="https://www.lego.com/en-us/product/en-us%2Fproduct%2FtbdStar-Wars-40765" target="_blank" rel="nofollow">Kamino Training Facility set for free</a>. This 190-piece set valued at $30 comes with three clone cadets and a KE-8 inforcer. </p><p>If you spend $40 on LEGO Star Wars sets, you'll get the <a href="https://www.lego.com/en-us/product/en-us%2Fproduct%2FMillennium-Falcon-Mini-Build-30708" target="_blank" rel="nofollow">Millennium Falcon Mini-Build valued at $5 for free</a>. This 74-piece set is a small, yet detailed recreation of the most iconic Star Wars ship.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to recycle electronics and old tech — tips for properly disposing used phones, TVs, and computers  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/how-to-recycle-electronics-and-old-tech-tips-for-properly-disposing-used-phones-tvs-and-computers</link>
                                                                            <description>
                            <![CDATA[ When it comes time to get rid of your used electronics, here's what to know about how to recycle them properly. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">tbKCYfsP7GMFxAgonyKDYm</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/f2ewK6xAgFULt696x55uKD-1280-80.png" type="image/png" length="0"></enclosure>
                                                                        <pubDate>Wed, 23 Apr 2025 10:01:00 +0000</pubDate>                                                                                                                                <updated>Wed, 22 Apr 2026 11:06:44 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Kate Kozuch ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xAVUdx6Qtp3SzugnnfNYsL.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Kate Kozuch is a managing editor of social and video at Tom&#039;s Guide, where she&#039;s been with the team since 2019. She also reviews smartwatches, covers TVs, tests the latest audio products and dabbles in cooking appliances. Of course, that&#039;s not when she&#039;s working on building the &lt;a href=&quot;https://www.tomsguide.com/reference/smart-home-guide&quot;&gt;ultimate DIY smart home&lt;/a&gt;. She has conducted over 100 different product reviews across these categories, turning her findings into buying guides and face-offs. She also manages a number of gift guides on the site. Kate has a strong on-camera presence as well. She has appeared on Cheddar and Fox 5 NY to talk trending tech news. She is also regularly featured on the Tom&#039;s Guide YouTube channel, runs the &lt;a href=&quot;https://www.tiktok.com/@tomsguide?lang=en&quot;&gt;Tom&#039;s Guide TikTok account&lt;/a&gt; with over 350,000 followers, and features all the tech she&#039;s testing &lt;a href=&quot;https://www.instagram.com/katekozuch/&quot;&gt;on her Instagram&lt;/a&gt;. When she’s not filming tech videos, you can find her taking up a new sport, mastering the NYT Crossword or channeling her inner celebrity chef. Speaking of, be sure to ask her about the time Guy Fieri made her a margarita at CES, or when her video of Martha Stewart drinking a margarita went mega-viral. Clearly, Kate has a thing for culinary icons and margaritas.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/png" url="https://cdn.mos.cms.futurecdn.net/f2ewK6xAgFULt696x55uKD-1280-80.png">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Recycling bin with old electronics in it]]></media:description>                                                            <media:text><![CDATA[Recycling bin with old electronics in it]]></media:text>
                                <media:title type="plain"><![CDATA[Recycling bin with old electronics in it]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/f2ewK6xAgFULt696x55uKD-1280-80.png" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Recycling your old electronics isn’t just something nice you can do for the environment — I’d argue it’s essential. Your daily devices like TVs, phones, and laptops are packed with precious materials that <em>definitely</em> don’t belong in a landfill. When procured properly, these materials can be recycled and reused for new products.</p><p>Although knowing how to recycle electronics and tech might seem confusing, I have good news. Companies like Apple and Samsung have made it easier to ditch your used gadgets with trade-in or take-back programs. Sometimes you can even earn credit towards new purchases as an added incentive to recycle.</p><p>I'd also suggest familiarizing yourself with your city’s and state’s rules around electronics disposal. Depending on where you live, it could actually be illegal to throw e-waste in the trash. Instead, check if your nearest municipal recycling center accepts old tech or has dedicated e-waste drop-off days.</p><p>But if you’re looking for more detailed information on how to throw away your TV, phone or computer properly, read on below for advice from our experts. </p><h3 class="article-body__section" id="section-how-to-dispose-of-or-throw-away-a-tv"><span>How to dispose of or throw away a TV</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="GfNSouG7AASiJRkufqcQ2n" name="How-to-recycle-electronics-and-old-tech-shutterstock_1159774714" alt="Pile of old TVs" src="https://cdn.mos.cms.futurecdn.net/GfNSouG7AASiJRkufqcQ2n.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Shutterstock)</span></figcaption></figure><p>It’s inevitable: TVs get old. And, when a TV starts to show its age, you might be tempted to replace it with one of the <a href="https://www.tomsguide.com/us/best-tvs,review-2224.html"><u>best TVs</u></a> on the market. As with all electronics, disposing of an old TV can be a potentially wasteful endeavor.</p><p>Before you kick your old set to the curb, think about some alternatives that are more socially and environmentally friendly. Do you have family members, friends or neighbors who would appreciate a hand-me-down? If your TV is still in working condition, someone out there will appreciate it.</p><p>If no one in your immediate circle comes to mind, expand your search. <a href="https://www.goodwill.org/locator/" target="_blank"><u>Finding a Goodwill donation center</u></a> near you is a great start, but consider schools and libraries, as well. You can also check out the <a href="https://www.epa.gov/recycle/electronics-donation-and-recycling" target="_blank"><u>EPA’s guide for donating electronics</u></a> for resources on how to recycle a TV in your area.</p><p>In my experience, folks on the receiving end of a TV donation tend to be appreciative, fast and flexible. That said, if you need a TV taken off your hands in a hurry, you can pay for <a href="https://www.bestbuy.com/site/recycling/tv-appliances-haul-away/pcmcat174900050009.c?id=pcmcat174900050009" target="_blank"><u>Best Buy’s haul-away service</u></a>. The big-box store is one of the largest e-waste-collecting retailers in the United States and will send your old TV to one of its recycling partners. (Just be sure to disconnect it before they arrive.) <em>— Michael Desjardin </em></p><h3 class="article-body__section" id="section-how-to-throw-away-a-laptop-or-computer"><span>How to throw away a laptop or computer</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:574px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="AzY8G2VNZ5XKHbKyRzTov8" name="JRQeGSRX6Qu4RRKjGVyDQN Cropped" alt="Old computers" src="https://cdn.mos.cms.futurecdn.net/AzY8G2VNZ5XKHbKyRzTov8.jpg" mos="" align="middle" fullscreen="" width="574" height="323" 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>I’ll be the first to admit that computing has a serious e-waste problem. From locked-down laptops that you can’t repair/upgrade yourself (Framework excluded) to limited recycling options and the risk of <a href="https://www.nature.com/articles/s43588-024-00712-6.epdf" target="_blank"><u>5 million tons of AI-driven e-waste by 2030</u></a>, more action is needed.</p><p>And sure, we’re seeing companies using recyclable materials like aluminum in their designs, or even adopting PCR plastics. But these, similar to planting trees to offset carbon emissions, all add up to greenwashing as it doesn’t tackle the problem of recycling your tech.</p><p>First question, can you upgrade what you already have? If you’re running a desktop PC, this could be easier than you think with a switch-out of the motherboard, CPU and other internals to give it a new lease on life. </p><p>If not, check for take-back programs: manufacturers and retailers don’t necessarily talk about them, but they are out there. <a href="https://www.bestbuy.com/trade-in/#/catalog/" target="_blank"><u>Best Buy has a trade-in calculator</u></a>, and <a href="https://www.apple.com/recycling/nationalservices/" target="_blank"><u>Apple has its own reuse and recycling program</u></a>. Alternatively, you can find a local recycling center. <a href="https://earth911.com/recycling-guide/how-to-recycle-computers/" target="_blank"><u>Head over to Earth911</u></a> and enter your ZIP code to find your nearest center. You can also consider donating — <a href="https://www.computerswithcauses.org/" target="_blank"><u>computers with causes</u></a> is doing amazing work in this area.</p><p>Picked your path? Good! Now make sure you back up your data, perform a Factory Reset, and deauthorize the account.</p><p>There’s a lot more to be done to make eliminating computing e-waste a lot easier. But at least this is a start. <em>— Jason England</em></p><h3 class="article-body__section" id="section-how-to-throw-away-a-phone"><span>How to throw away a phone</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:930px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="Jm8UTBj7HkHyVrMzGmsZ9T" name="4yNnugMYtgw3jkrjcSWchX Cropped" alt="Old phones" src="https://cdn.mos.cms.futurecdn.net/Jm8UTBj7HkHyVrMzGmsZ9T.jpg" mos="" align="middle" fullscreen="" width="930" height="523" 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>If you're about to upgrade to a new phone, you've got plenty of options for recycling your current handset. And many of those same options are still available even if you've got a growing pile of older devices taking up space in your house that you're looking to responsibly off-load.</p><p>These days, most phone makers let you trade-in your current phone when buying a new one, offering a rebate that can lower the cost of your purchase. <a href="https://www.samsung.com/us/aboutsamsung/sustainability/environment/responsible-recycling/programs/" target="_blank"><u>Samsung</u></a>, Google and <a href="https://www.apple.com/shop/trade-in" target="_blank"><u>Apple</u></a> are among the biggest phone makers with trade-in programs to go with new device purchases.</p><p>But if you're just looking to recycle any old phone, Google offers you the chance to request a free shipping label to send your device to one of its recycling partners, and <a href="https://store.google.com/magazine/recycling?hl=en-US" target="_blank"><u>its recycling program page</u></a> also provides a link to help you find recycling services near you.</p><p>While Apple emphasizes trade-ins for new iPhones, the company says it will also take devices off your hands that aren't eligible for a credit; Apple accepts phone accessories, too.</p><p>Retailers also accept phones for recycling, with <a href="https://www.bestbuy.com/site/services/recycling/pcmcat149900050025.c?id=pcmcat149900050025" target="_blank"><u>Best Buy offering in-store drop-off</u></a> for devices including phones. But some retailers you wouldn't associate with handsets have recycling programs, too, including <a href="https://www.staples.com/stores/recycling" target="_blank"><u>Staples</u></a> and <a href="https://www.staples.com/stores/recycling" target="_blank"><u>Home Depot</u></a>.</p><p>Another option is to turn to services that make electronics recycling a central part of their mission. <a href="https://www.ecoatm.com" target="_blank"><u>EcoATM</u></a> has more than 6,000 kiosks across the U.S. where you can get cash back for your older phone. <a href="https://www.call2recycle.org" target="_blank"><u>Call2Recyle</u></a> specializes in battery recycling, but the organization's drop-off sites also accept cell phones.</p><p>You can recycle more than just phones to avoid e-waste. Cases — particularly those made out of plastic — can also be disposed of in a responsible manner. Some case makers like <a href="https://www.casetify.com/about-us/sustainability" target="_blank"><u>Casetify</u></a> and <a href="https://case-mate.com/pages/recycle" target="_blank"><u>Case-Mate</u></a> offer recycling programs, while an organization called <a href="https://www.closetheloopusa.com/news/cell-phone-case-disposal/" target="_blank"><u>Close The Loop</u></a> lets you mail in phone cases for recycling.</p><p>Before you recycle your phone, make sure you back up any data you want to keep. Then, do a factory resist to <a href="https://www.tomsguide.com/us/how-to-erase-personal-data,news-18034.html"><u>erase that data from the phone</u></a> before handing it over for recycling. <em>— Philip Michaels</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/home/10-ways-to-save-energy-at-home-small-changes-that-will-make-a-big-impact-on-your-energy-bill">Ways to save energy at home</a></li><li><a href="https://www.tomsguide.com/home/how-does-the-energy-star-work-and-how-can-it-help-you-save-on-your-utility-bills">How does Energy Star work and what to look for</a></li><li><a href="https://www.tomsguide.com/phones/samsung-phones/win-you-can-now-trade-in-your-old-samsung-phones-for-cash-year-round">You can now trade-in your old Samsung phones for cash year-round</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon's reportedly ditching Android OS on its Fire TVs later this year ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/amazons-reportedly-ditching-android-os-on-its-fire-tvs-later-this-year</link>
                                                                            <description>
                            <![CDATA[ Amazon's reportedly ditching Android OS on its Fire TVs later this year ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">vJLQhMaZ6cpjuw3yhxMPKA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/6uGzMoiyiYvgNFRprhe9Kn-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 20 Apr 2025 19:18:38 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/6uGzMoiyiYvgNFRprhe9Kn-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Fire TV interface on the Fire TV Stick 4K (2nd gen)]]></media:description>                                                            <media:text><![CDATA[Fire TV interface on the Fire TV Stick 4K (2nd gen)]]></media:text>
                                <media:title type="plain"><![CDATA[Fire TV interface on the Fire TV Stick 4K (2nd gen)]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/6uGzMoiyiYvgNFRprhe9Kn-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Amazon has been quietly working on ditching the Android-based software its Fire TV streaming devices run on in favor of its own OS, and a new report claims the replacement will launch later this year. </p><p>As first reported in 2023,<a href="https://www.tomsguide.com/news/amazon-set-to-ditch-android-in-all-devices-and-its-starting-with-fire-tv"> Amazon is cooking up a Linux-based OS, codenamed Vega</a>, to eventually replace Fire OS, a fork of open source Android that sits inside the likes of the <a href="https://www.tomsguide.com/reviews/amazon-fire-tv-stick-4k-max-2nd-gen">Fire TV Stick 4K Max</a>, <a href="https://www.tomsguide.com/reviews/amazon-fire-max-11">Fire Tablet series</a> and <a href="https://www.tomsguide.com/face-off/echo-show-8-3rd-gen-vs-echo-show-8-2nd-gen-which-smart-display-should-you-buy">Echo Show speakers</a>. </p><p>Now, <a href="https://www.lowpass.cc/p/amazon-vega-os-2025-release-kepler-sdk" target="_blank">LowPass</a>, which has a great track record with insider Amazon information, reports that Amazon will release its “first TV streaming device powered by its still-unannounced Vega OS later this year.” The launch is a bit delayed, as the company initially aimed for a late 2024 rollout, according to sources familiar with Amazon's plans. Since Vega OS requires all new apps to be written in a web-forward format for the platform, Amazon has been “courting major publishers" to bring their apps on board. </p><p>Though Amazon still hasn't officially announced Vega OS, we've already seen it roll out to three existing products: the Echo Show 5, Echo Hub, and Echo Spot. But smart speakers are relatively simple devices compared to a TV or streaming stick, and whether Amazon would push forward with the transition at all came into question <a href="https://www.aftvnews.com/android-14-is-coming-to-future-fire-tvs-confirmed-by-amazon/?utm_source=www.lowpass.cc&utm_medium=referral&utm_campaign=scoop-amazon-s-secret-vega-os-inches-closer-to-launch" target="_blank">in February</a> after Amazon revealed it's bringing an updated version of Fire OS to this year's smart TVs. </p><p>That led to some speculating Amazon could be abandoning Vega entirely, but it appears it's charging full steam ahead. This latest report cites job listings referencing the still-in-development software as well as apps that have been built by major publishers for this new platform. </p><h2 id="what-does-this-mean-for-sideloading-apps">What does this mean for sideloading apps?</h2><p>However Amazon ends up handling the rollout of Vega OS, it marks a serious blow for sideloading apps on Fire TV devices. Sideloading is a handy option to download and run apps not available through the Fire TV app store. </p><p>For example, before Peacock was available on Fire TVs, sideloading was the only way to access the app. Sideloading is also popular among users who'd prefer to customize their streaming experience with third-party apps like Kodi or IPTV emulators.</p><p>Even if sideloading still works with Vega OS, by design it'll be limited to apps specifically made for Vega OS. That cuts down on its utility significantly, as even if some major app makers do jump on board, the selection will pale in comparison to the robust Android ecosystem.</p><p>As Amazon gets ready to roll out its first Fire TV powered by the new Vega OS later this year, it's clear the company walks a fine line between maintaining its market dominance and risking the loyalty of its most devoted users. </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/tvs/fire-tv-just-got-even-more-frustrating-to-use-but-heres-a-workaround">Fire TV just got even more frustrating to use — but here’s a workaround</a></li><li><a href="https://www.tomsguide.com/tvs/samsung-s90d-oled-tv-review">I tested this Samsung OLED TV for 2 weeks and it offers the best bang for your buck</a></li><li><a href="https://www.tomsguide.com/tvs/hdmi-2-1-vs-hdmi-2-2-biggest-differences-explained-and-when-you-should-upgrade">HDMI 2.1 vs HDMI 2.2: Biggest differences explained and when you should upgrade</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Trump exempts smartphones and computers from latest tariffs — here's what it means for you ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/trump-exempts-smartphones-and-computers-from-latest-tariffs-heres-what-it-means-for-you</link>
                                                                            <description>
                            <![CDATA[ The White House announces exclusions for smartphones, monitors, and other consumer electronics from Trump's hefty tariffs. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Tsay4qvrmvQrogV8FbgsV7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/9QbRuA9EZ52BF5pHftdZ63-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 12 Apr 2025 17:11:08 +0000</pubDate>                                                                                                                                <updated>Sat, 12 Apr 2025 17:15:43 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                                    <dc:creator><![CDATA[ Alyse Stanley ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/BxNnQuBWRHqkv5xWZsjrjc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Alyse Stanley is a news editor at Tom’s Guide, overseeing weekend coverage and writing about the latest in tech, gaming, and entertainment. Before Tom’s Guide, Alyse worked as an editor for the Washington Post’s sunsetted video game section, Launcher, where she also wrote about indie games you shouldn’t miss, how to tackle your gaming backlog, and all things Nintendo. She previously led Gizmodo’s weekend news desk covering breaking tech news and has written game reviews and features for outlets like Polygon, Unwinnable, and Rock, Paper, Shotgun. A recent Chicago-area transplant born and raised in Virginia, Alyse is a big fan of horror movies, cartoons, and roller skating.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/9QbRuA9EZ52BF5pHftdZ63-1280-80.jpg">
                                                            <media:credit><![CDATA[Chris Carlson/Pool/Getty Images]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[RNC live stream: President Donald Trump speaks at Republican National Convention]]></media:description>                                                            <media:text><![CDATA[RNC live stream: President Donald Trump speaks at Republican National Convention]]></media:text>
                                <media:title type="plain"><![CDATA[RNC live stream: President Donald Trump speaks at Republican National Convention]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/9QbRuA9EZ52BF5pHftdZ63-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The tech sector is getting some relief from President Donald Trump's hefty tariffs on products imported from China, Mexico, and Canada. Smartphones, computer monitors, and some electronics will be exempt from his global reciprocal tariffs, according to a <a href="https://content.govdelivery.com/accounts/USDHSCBP/bulletins/3db9e55" target="_blank">U.S. Customs and Border Protection</a> notice posted late Friday.</p><p>Along with these consumer products, exclusions will apply to semiconductors, solar cells, flat panel TV displays, flash drives, memory cards, and solid-state drives. The exemption applies to products entering the United States or removed from warehouses as early as April 5. </p><p>The notice explained these products will be excluded from Trump's 10% global tariff on most countries as well as the 145% tariff imposed on Chinese imports, a move that's poised to take a serious toll on some of the biggest names in tech, from Apple to Nvidia and more. Since iPhones aren't made in the U.S., <a href="https://www.tomsguide.com/phones/iphones/how-will-tariffs-impact-the-iphone-17-price-heres-what-the-experts-say">Trump's tariffs stood to seriously impact the iPhone 17's price</a> when it rolls out later this year. </p><p>In the weeks following <a href="https://www.tomsguide.com/computing/buying-cheap-tech-could-take-a-hit-in-2025-trumps-tariffs-explained#viafoura-comments">Trump's tariffs</a> announcement, the stock market has been in freefall. Apple, which makes the majority of its products in China, has been among the hardest hit, losing over $640 billion in market value since April 2, when Trump signed a sweeping executive order instituting reciprocal tariffs on several countries critical to Apple’s supply chain. Some analysts predicted the <a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-could-cost-usd2-300-due-to-trump-tariffs">iPhone 16's price could balloon by up to 43%</a> or more to offset the extra cost. </p><h2 id="potential-relief-from-rising-tech-prices">Potential relief from rising tech prices</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="TEwRQMUnjWEa5GLUp5j8jA" name="Trump Tariff Impact" alt="Bose QuietComfort Headphones, Apple Watch 10 and Nintendo Switch" src="https://cdn.mos.cms.futurecdn.net/TEwRQMUnjWEa5GLUp5j8jA.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future / Shutterstock)</span></figcaption></figure><p>All your favorite tech brands —  everything from the <a href="https://www.tomsguide.com/us/best-apple-iphone,review-6348.html">best iPhones</a> and <a href="https://www.tomsguide.com/best-picks/best-macbook">best MacBooks</a> to PCs, gaming consoles and more — stood to feel the ripple effects of these tariffs. Most tech devices are built using imported parts if they're not manufactured outside the U.S. entirely. </p><p>Tech companies have expressed mounting concerns that the price of electronics for U.S. consumers could soar given that so many of them rely on Chinese manufacturing. Based on early estimates, the <a href="https://shop.cta.tech/products/how-the-proposed-trump-tariffs-increase-prices-for-consumer-technology-products-january-2025" target="_blank">Consumer Technology Association</a> predicted the prices for laptops and tablets could increase by 46-68%, while video game consoles could jump by as much as 40-58%. </p><p>Now with these exemptions in place, it's a big win for tech companies and consumers alike. Companies like Apple won't have to decide whether to take the hit or offload the increased price of doing business onto customers — at least for now. With how much the White House has been flip-flopping these past few weeks in its tariff rollout, it's hard to say anything for certain. </p><p>Francisco Jeronimo, vice president EMEA, Devices (Data & Analytics) at IDC, told Tom's Guide that the exemptions "a clear recognition of the economic shock such duties would deliver to American consumers, some of the most popular consumer electronics brands and the broader tech industry."</p><p>"The reality is that major US technology companies remain heavily dependent on China’s highly efficient and deeply integrated manufacturing ecosystem," Jeronimo added. "For high-volume products like smartphones, tablets or PCs, any attempt at rapid diversification would be both costly and logistically unfeasible."</p><p>The notice comes after China responded to Trump's escalating trade war on Friday with tariffs of its own to the tune of a 125% tariff on all U.S. goods. The exemptions also seem to undermine a cornerstone of Trump's tariff regime: That it's part of an “economic revolution” to drive high-tech supply chains and parts suppliers to the U.S. and employ American workers. How that'll come to pass without major tech companies facing the sting of higher tariffs remains to be seen. </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/tech/trump-tariffs-i-looked-at-200-popular-products-on-amazon-to-see-ones-have-the-biggest-price-hikes">Trump tariffs — I looked at 200 popular products on Amazon to see which ones have the biggest price hikes</a></li><li><a href="https://www.tomsguide.com/computing/buying-cheap-tech-could-take-a-hit-in-2025-trumps-tariffs-explained">Buying cheap tech could take a hit in 2025 — Trump’s tariffs, explained</a></li><li><a href="https://www.tomsguide.com/gaming/handheld-gaming/nintendo-switch-2-what-the-tariff-pause-could-mean-for-nintendos-big-launch">Nintendo Switch 2 — why tariff pause could be good news for US shipments</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Trump tariffs — I looked at 200 popular products on Amazon to see which ones have the biggest price hikes  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/tech/trump-tariffs-i-looked-at-200-popular-products-on-amazon-to-see-ones-have-the-biggest-price-hikes</link>
                                                                            <description>
                            <![CDATA[ Trump's tariffs don't go into effect until April 9, but have they already started to affect consumer prices? I looked at 200 popular products on Amazon to find out. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">EgXAQZnE9Y4WsEkHG6gpsn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/TEwRQMUnjWEa5GLUp5j8jA-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 08 Apr 2025 15:14:52 +0000</pubDate>                                                                                                                                <updated>Wed, 09 Apr 2025 12:08:38 +0000</updated>
                                                                                                                                            <category><![CDATA[Tech]]></category>
                                                                                                <author><![CDATA[ mike.prospero@futurenet.com (Mike Prospero) ]]></author>                    <dc:creator><![CDATA[ Mike Prospero ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/6ZM8mX4UwccqDJTh9gLPqV.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Michael A. Prospero is the U.S. Editor-in-Chief for Tom’s Guide. He oversees all evergreen content and oversees the Homes, Smart Home, and Fitness/Wearables categories for the site. In his spare time, he also tests out the latest drones, electric scooters, and smart home gadgets, such as video doorbells. Before his tenure at Tom&#039;s Guide, he was the Reviews Editor for Laptop Magazine, a reporter at Fast Company, the Times of Trenton, and, many eons back, an intern at George magazine. He received his undergraduate degree from Boston College, where he worked on the campus newspaper The Heights, and then attended the Columbia University school of Journalism. When he’s not testing out the latest running watch, electric scooter, or skiing or training for a marathon, he’s probably using the latest sous vide machine, smoker, or pizza oven, to the delight — or chagrin — of his family.&lt;/p&gt; ]]></dc:description>
                                                                                                                                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/TEwRQMUnjWEa5GLUp5j8jA-1280-80.jpg">
                                                            <media:credit><![CDATA[Future / Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Bose QuietComfort Headphones, Apple Watch 10 and Nintendo Switch ]]></media:description>                                                            <media:text><![CDATA[Bose QuietComfort Headphones, Apple Watch 10 and Nintendo Switch ]]></media:text>
                                <media:title type="plain"><![CDATA[Bose QuietComfort Headphones, Apple Watch 10 and Nintendo Switch ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/TEwRQMUnjWEa5GLUp5j8jA-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Following the announcement of President <a href="https://www.tomsguide.com/news/live/tech-tariff-watch-live-price-increase-tracker">Trump's tariffs</a> on April 2, one of the biggest concerns among U.S. consumers has been the potential increase in the cost of products sold in the country.</p><p>Even before the tariffs go into effect — April 9 — <a href="https://www.tomsguide.com/gaming/nintendo/nintendo-switch-2-pre-orders-latest-updates">Nintendo said it would delay the launch of the Switch 2</a> to assess its impact. </p><p>Analysts have been predicting that prices will jump — <a href="https://www.tomsguide.com/phones/iphones/apples-tariff-crisis-explained-heres-why-iphone-airpods-macs-and-apple-watch-may-get-a-lot-more-expensive">some of Apple's products will be hit by a 54% tariff</a>, according to Bloomberg's Marc Gurman — but <a href="https://finance.yahoo.com/news/samsung-elec-says-tv-business-041614672.html" target="_blank">Samsung says its TV business won't be as badly hurt</a>. </p><p>But, have companies already started increasing the cost of their products?</p><p>To find out, I went to Amazon to analyze the prices on some of the more popular products. Here's what I found.</p><h3 class="article-body__section" id="section-methodology"><span>Methodology</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="P6anYV24ZUcUyjKSVRA6Le" name="Bose QuietComfort headphones" alt="Bose QuietComfort Headphones price history on CamelCamelCamel" src="https://cdn.mos.cms.futurecdn.net/P6anYV24ZUcUyjKSVRA6Le.jpg" mos="" align="middle" fullscreen="" width="2000" height="1125" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: CamelCamelCamel)</span></figcaption></figure><p>First, a note about my methods: To come up with a list of the 200 popular products, I turned to Camelcamelcamel, which tracks the prices of products on Amazon.</p><p>I went to  <a href="https://camelcamelcamel.com/popular?deal=0" target="_blank" rel="nofollow">CCC's Popular Products page</a>, and copied the price information from the first 200 products that were listed there. The data was taken on April 7, two days before the tariffs are due to take effect.</p><p>I then imported all the information into a spreadsheet, and analyzed the results.</p><p>I will say that this isn't a perfect barometer, as products go on sale all the time, and prices can also be affected by the age of a product, as well as myriad other factors. But, looking at prices over a range of categories could show a general trend one way or another.</p><h3 class="article-body__section" id="section-overall-results"><span>Overall results</span></h3><p>If you want to buy something before the tariffs hit, now's the time. According to my data, prices for these 200 items are down an average of 7.6% over their normal prices. </p><p>The current average price for the items listed was $417.17, while the historical average price for all the products is $446.62.</p><h3 class="article-body__section" id="section-what-s-gone-up-the-most"><span>What's gone up the most</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:3181px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="M2osdiTk7syWZ8Yu8Py9LY" name="Sony WH-1000XM4 (2).jpg" alt="Sony WH-1000XM4" src="https://cdn.mos.cms.futurecdn.net/M2osdiTk7syWZ8Yu8Py9LY.jpg" mos="" align="middle" fullscreen="" width="3181" height="1790" 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>The product on the list that's seen the biggest increase is the Sony WH-1000XM4 headphones; they're currently listed for <a href="https://www.amazon.com/dp/B0863TXGM3" target="_blank" rel="nofollow">$348 on Amazon</a>, but their average price according to <a href="https://camelcamelcamel.com/product/B0863TXGM3?active=price_amazon&context=popular" target="_blank" rel="nofollow">CamelCamelCamel is just $222</a>. </p><div ><table><tbody><tr><td class="firstcol " ><p><strong>Product</strong></p></td><td  ><p><strong>Current price</strong></p></td><td  ><p><strong>Average price</strong></p></td><td  ><p><strong>Price difference</strong></p></td><td  ><p><strong>% difference</strong></p></td></tr><tr><td class="firstcol " ><p>Sony WH-1000XM4 Wireless Headphones </p></td><td  ><p>$348.00</p></td><td  ><p>$222.44</p></td><td  ><p>$125.56</p></td><td  ><p>36.08%</p></td></tr><tr><td class="firstcol " ><p>Winix 5500-2 Air Purifier </p></td><td  ><p>$205.49</p></td><td  ><p>$153.14</p></td><td  ><p>$52.35</p></td><td  ><p>25.48%</p></td></tr><tr><td class="firstcol " ><p>Akira 35th Anniversary Box Set</p></td><td  ><p>$179.98</p></td><td  ><p>$136.51</p></td><td  ><p>$43.47</p></td><td  ><p>24.15%</p></td></tr><tr><td class="firstcol " ><p>Dynapep Energy Time Released Energy Micro-shot</p></td><td  ><p>$11.96</p></td><td  ><p>$9.22</p></td><td  ><p>$2.74</p></td><td  ><p>22.91%</p></td></tr><tr><td class="firstcol " ><p>H&R Block Tax Software Deluxe + State 2024 </p></td><td  ><p>$59.99</p></td><td  ><p>$46.34</p></td><td  ><p>$13.65</p></td><td  ><p>22.75%</p></td></tr><tr><td class="firstcol " ><p>Garmin inReach Mini 2</p></td><td  ><p>$399.99</p></td><td  ><p>$311.23</p></td><td  ><p>$88.76</p></td><td  ><p>22.19%</p></td></tr><tr><td class="firstcol " ><p>DEWALT Mechanics Tools Kit and Socket Set</p></td><td  ><p>$84.99</p></td><td  ><p>$67.42</p></td><td  ><p>$17.57</p></td><td  ><p>20.67%</p></td></tr><tr><td class="firstcol " ><p>Bose QuietComfort Bluetooth Headphones</p></td><td  ><p>$349.00</p></td><td  ><p>$279.12</p></td><td  ><p>$69.88</p></td><td  ><p>20.02%</p></td></tr><tr><td class="firstcol " ><p>Lavazza Super Crema Whole Bean Coffee</p></td><td  ><p>$131.75</p></td><td  ><p>$108.16</p></td><td  ><p>$23.59</p></td><td  ><p>17.91%</p></td></tr></tbody></table></div><p>Sony's headphones feel like a bit of an outlier, as it's a generation old, so its higher price may be more reflective of limited inventory.</p><p>The other device that saw the greatest increase, percentage-wise is the Winix 5500-2 Air purifier; while it's currently listed at <a href="https://www.amazon.com/dp/B01D8DAY" target="_blank" rel="nofollow">$205 at Amazon</a> (and a presuming 18% off its regular price), <a href="https://camelcamelcamel.com/product/B01D8DAYII?active=price_amazon&context=popular" target="_blank">CamelCamelCamel says that its average price is just $153.14</a>. </p><h3 class="article-body__section" id="section-what-about-apple-products"><span>What about Apple products?</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:2354px;"><p class="vanilla-image-block" style="padding-top:56.20%;"><img id="rottKHZfuy8nHszK4xxy6M" name="AW11-rumors-02" alt="The Apple Watch Series 10 on display at the device's launch in September 2024" src="https://cdn.mos.cms.futurecdn.net/rottKHZfuy8nHszK4xxy6M.jpg" mos="" align="middle" fullscreen="" width="2354" height="1323" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>One company thought to be <a href="https://www.tomsguide.com/phones/iphones/apples-tariff-crisis-explained-heres-why-iphone-airpods-macs-and-apple-watch-may-get-a-lot-more-expensive">especially vulnerable to the tariffs is Apple,</a> as a number of its most popular products are made in China, which could face tariffs of up to 54%. </p><p>However, it doesn't look like the company has adjusted its prices yet, so now may be the time to buy. In the list I compiled, there were a number of Apple products — the Apple Watch 10, AirPods Pro 2, iPad mini, MacBook Air, to name a few — and on average, prices were down 1.4%. </p><p>The product with the highest price increase is the Apple Watch Series 10 (42mm, GPS), which is <a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminium-Always/dp/B0DGJ5KQL7" target="_blank" rel="nofollow">now listed at $399</a>, up from an average of $364. However, this could be more of a reflection that the watch isn't currently on sale — $399 is its regular price — than due to any international trade issues. </p><p>On the other end of the spectrum, the Apple iPad (10th Generation) with 256GB of storage is currently <a href="https://www.amazon.com/Apple-2022-10-9-inch-Wi-Fi-256GB/dp/B0BJLBNNRT?th=1" target="_blank" rel="nofollow">$349 on Amazon</a>, down 27% from its average price of $446.</p><h3 class="article-body__section" id="section-outlook"><span>Outlook</span></h3><p>There's no doubt that tariffs will soon impact the cost of consumer goods, as the tariffs will go into effect on April 9. <a href="https://www.tomsguide.com/computing/acer-announces-10-percent-price-increase-in-response-to-trump-tariffs-just-the-beginning">Acer, for example, said that it will increase the cost of its products by 10%</a>. And, there's still a remote chance that the U.S. will change the tariff rates on certain countries, depending on how much the Trump administration is willing to negotiate.</p><p><a href="https://www.tomsguide.com/news/live/tech-tariff-watch-live-price-increase-tracker">We'll be tracking the tariff increases here</a>, so be sure to check in regularly to see if the goods you purchase will go up in price. </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/computing/buying-cheap-tech-could-take-a-hit-in-2025-trumps-tariffs-explained">Buying cheap tech could take a hit in 2025 — Trump’s tariffs, explained</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-17-pro-max-could-cost-usd2-300-due-to-trump-tariffs">iPhone 17 Pro Max could cost $2,300 due to Trump tariffs</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-sales-are-going-up-as-people-look-to-beat-the-tariffs-heres-whats-going-on">iPhone sales are surging as shoppers look to beat Trump tariffs — 'people are just rushing in worried'</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
            </channel>
</rss>