<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:dc="https://purl.org/dc/elements/1.1/"
     xmlns:dcterms="http://purl.org/dc/terms/"
     xmlns:media="http://search.yahoo.com/mrss/"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:cf="https://www.futureplc.com/rss/content-flags"
>
    <channel>
                    <atom:link href="https://www.tomsguide.com/feeds/tag/airpods" rel="self" type="application/rss+xml" />
                            <title><![CDATA[ Latest from Tom's Guide in Airpods ]]></title>
                <link>https://www.tomsguide.com/audio/headphones/airpods</link>
        <description><![CDATA[ All the latest airpods content from the Tom's Guide team ]]></description>
                                    <lastBuildDate>Sat, 25 Jul 2026 09:30:00 +0000</lastBuildDate>
                            <language>en</language>
                                <item>
                                                            <title><![CDATA[ I forgot my baby monitor when travelling and discovered this simple AirPods hack every parent needs to know about ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/i-forgot-my-baby-monitor-when-travelling-and-discovered-this-simple-airpods-hack-every-parent-needs-to-know-about</link>
                                                                            <description>
                            <![CDATA[ This simple iPhone hack is one to know about for any forgetful parents out there. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">64qRKDJm3ZDvbqzTFLgXkc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/4HNobKMFsxsACCJ8zqzuxH-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 25 Jul 2026 09:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ jane.mcguire@futurenet.com (Jane McGuire) ]]></author>                    <dc:creator><![CDATA[ Jane McGuire ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/vV4Uj3e5TZvBqmmsjT2EU6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jane McGuire is Tom&#039;s Guide&#039;s Fitness Managing Editor, which means she looks after everything fitness-related — from running gear and fitness trackers to yoga mats and sports bras. An avid runner, Jane has tested and reviewed fitness products for the past five years, so she knows what to look for when finding a good running watch or a pair of shorts with pockets big enough for your smartphone, running gels, and house keys. &lt;/p&gt;&lt;p&gt;Jane has run six marathons — the London Marathon five times, and the Berlin Marathon once -and is still on a quest to tick off all of the marathon majors. Her marathon PR is 3:30, which she ran in the New Balance Supercomp Elite V5&#039;s, but she also spends a lot of time talking about her  ‘joy plan’, where she runs for happiness, not for PR’s. &lt;/p&gt;&lt;p&gt;Previous to Tom’s Guide, Jane worked for Runner’s World, where she co-hosted the Runner’s World podcast. She also presents on a YouTube channel called the Run Testers, alongside other running-mad journalists, where they review the latest shoes, kit, and tech. Her work has also appeared in Coach, Get Sweat Go, and Women’s Health. &lt;/p&gt;&lt;p&gt;When she&#039;s not pounding the pavements, you&#039;ll find Jane striding round the Surrey Hills, taking far too many photos of her spaniel, Toby. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/4HNobKMFsxsACCJ8zqzuxH-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a baby monitor on a crib]]></media:description>                                                            <media:text><![CDATA[a baby monitor on a crib]]></media:text>
                                <media:title type="plain"><![CDATA[a baby monitor on a crib]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/4HNobKMFsxsACCJ8zqzuxH-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As a single mom, it’s a miracle I remember my son when packing the car to leave the house for a weekend break (I’m joking). I’ll always forget something, and last weekend, it was the baby monitor. </p><p>My son is two-and-a-half, so while it’s not as much of an essential as it was a year ago, I like to be able to keep an eye, or an ear, on the tiny Houdini, especially when he’s sleeping somewhere new. Luckily, I’d seen this simple hack to turn the <a href="https://www.tomsguide.com/buying-guide/best-airpods">best AirPods</a> and your iPhone into a combined baby monitor. It’s one all parents should know about ahead of the summer vacation period. </p><h2 id="how-to-use-your-airpods-as-a-baby-monitor">How to use your AirPods as a baby monitor </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3692px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="etRBWkAhTJqNbhHSC5Cg4i" name="IMG_0148" alt="airpods live listen" src="https://cdn.mos.cms.futurecdn.net/etRBWkAhTJqNbhHSC5Cg4i.jpg" mos="" align="middle" fullscreen="" width="3692" height="2076" 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>Ok, so you won’t be able to see your baby using this hack, but you’ll be able to hear him or her. All you’ll need is your phone and your AirPods (or Beats) headphones. Once you pop your headphones in your ears, you’ll be able to use your AirPods Live Listen feature to leave your phone in the room with them and listen to your tot from somewhere else in the house. </p><p>Here’s how to do it: </p><ul><li>Wear one or both of your AirPods or Beats headphones. The list of headphones that work with this feature includes: AirPods, AirPods Pro, AirPods Max, Powerbeats Pro, Beats Fit Pro, or Powerbeats Fit. You’ll also need an iPhone with iOS 26 or later installed.</li><li>To turn on Live Listen, go to your iPhone’s Settings, then scroll to Accessibility.</li><li>From here, go to Audio & Visual, Live Listen, then tap Start Live Listen.</li><li>From your lock screen, swipe down to go to the Control Center.</li><li>From here, click on the ear icon, and select Live Listen — this will only work if you have a headphone in.</li></ul><p>You’ll then be able to hear your baby should they cry. I found that the Live Listen was surprisingly sensitive, and I was able to hear him waking up and moving around after his nap before he called out for me. A game changer for traveling, or if you’re as forgetful as I am! </p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/im-a-smartwatch-reviewer-and-heres-my-apple-watch-series-12-wish-list-three-upgrades-i-want-and-one-i-dont">I'm a smartwatch reviewer, and here's my Apple Watch Series 12 wish list — three upgrades I want, and one I don't</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/leaked-apple-watch-12-design-change-is-the-opposite-of-an-upgrade-and-that-has-me-worried">Leaked Apple Watch 12 design change is the opposite of an upgrade — and that has me worried</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/samsung-galaxy-watch-ultra-2-needs-these-3-upgrades-to-convince-me-to-switch-from-my-apple-watch-ultra-3">Samsung Galaxy Watch Ultra 2 needs these 3 upgrades to convince me to switch from my Apple Watch Ultra 3</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple’s premium AirPods Max 2 just crashed by $100 at Amazon ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/apples-premium-airpods-max-2-just-crashed-by-usd100-at-amazon</link>
                                                                            <description>
                            <![CDATA[ The AirPods Max 2 are Apple's premium headphones and a must-have for iPhone and Mac users. They just got $100 cheaper. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">AXjL5v83pWvwoaJFz3SX6U</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/nFPs5Ghr52dnnH6VigML2F-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 21 Jul 2026 09:56:53 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/nFPs5Ghr52dnnH6VigML2F-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:description>                                                            <media:text><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:text>
                                <media:title type="plain"><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/nFPs5Ghr52dnnH6VigML2F-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I've been using the first-generation AirPods Max since they debuted over five years ago. So I have no trouble recommending their follow-up, the <a href="https://www.tomsguide.com/audio/headphones/apple-airpods-max-2-review">AirPods Max 2</a>, when I see a welcome price drop courtesy of Amazon.</p><p>Right now, the <a href="https://www.amazon.com/gp/aw/d/B0GSS72GZJ" target="_blank" rel="nofollow">AirPods Max 2 are $100 off at Amazon, bringing them down to $449</a>. At a time when Apple is raising prices across the board, this kind of deal is worth taking advantage of.</p><p>It's not the only AirPods deal at Amazon right now, either. The retailer is currently discounting <a href="https://www.amazon.com/dp/B0FQFB8FMG?ref=amzdv_ucc_dp_lod_B0GSS4SGZR_B0FQFB8FMG" target="_blank" rel="nofollow">the AirPods Pro 3</a> and the <a href="https://www.amazon.com/dp/B0DGJ7HYG1?ref=amzdv_ucc_dp_lod_B0GSS4SGZR_B0DGJ7HYG1&th=1" target="_blank" rel="nofollow">AirPods 4 with noise cancelling</a>.</p><p>If you're an Apple user and want to pick up a pair of the <a href="https://www.tomsguide.com/us/best-headphones,review-1988.html">best headphones</a>, now could be the time to do it.</p><div class="product"><a data-dimension112="9291fb60-84e4-11f1-bd07-afa5a75ea528" data-action="Deal Block" data-label="reviewed the AirPods Max 2" data-dimension48="reviewed the AirPods Max 2" data-dimension25="$449" href="https://www.amazon.com/gp/aw/d/B0GSS72GZJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1141px;"><p class="vanilla-image-block" style="padding-top:131.46%;"><img id="yhaxpUGyinSQi4P2276rrF" name="AirPods Max 2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yhaxpUGyinSQi4P2276rrF.png" mos="" align="middle" fullscreen="" width="1141" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>My colleague Erin <a href="https://www.tomsguide.com/audio/headphones/apple-airpods-max-2-review" data-dimension112="9291fb60-84e4-11f1-bd07-afa5a75ea528" data-action="Deal Block" data-label="reviewed the AirPods Max 2" data-dimension48="reviewed the AirPods Max 2" data-dimension25="$449">reviewed the AirPods Max 2 </a>when they came out in April and rated them as the best over-ear headphones for Apple users. The sound quality is vibrant, energetic, and fun, and they look great, too. The noise cancelling is also improved. We wholeheartedly recommend these headphones to every iPhone user who can afford them — but you should <strong>only buy them while discounted</strong>.<a class="view-deal button" href="https://www.amazon.com/gp/aw/d/B0GSS72GZJ" target="_blank" rel="nofollow" data-dimension112="9291fb60-84e4-11f1-bd07-afa5a75ea528" data-action="Deal Block" data-label="reviewed the AirPods Max 2" data-dimension48="reviewed the AirPods Max 2" data-dimension25="$449">View Deal</a></p></div><div class="product"><a data-dimension112="9291fbd8-84e4-11f1-8fb8-1fbd6195d4e8" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$179" href="https://www.amazon.com/dp/B0FQFB8FMG?ref=amzdv_ucc_dp_lod_B0GSS4SGZR_B0FQFB8FMG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review" data-dimension112="9291fbd8-84e4-11f1-8fb8-1fbd6195d4e8" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$179">AirPods Pro 3</a> are some of the best wireless earbuds you can get nowadays, especially if you have an iPhone, iPad or MacBook. The sound quality is industry-leading, the noise cancellation improved, and you get a plethora of smart features like heart rate monitoring.<a class="view-deal button" href="https://www.amazon.com/dp/B0FQFB8FMG?ref=amzdv_ucc_dp_lod_B0GSS4SGZR_B0FQFB8FMG" target="_blank" rel="nofollow" data-dimension112="9291fbd8-84e4-11f1-8fb8-1fbd6195d4e8" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$179">View Deal</a></p></div><p>While I'd contest other over-ear speakers will give you better overall sound, more control and certainly better portability — I can't knock the AirPods Max 2 when it comes to simplicty and comfort.</p><p>I don't mean to say the Max 2 sound bad — far from it. They have a wonderfully wide soundstage with a balanced output that won't overpower you in any one area, regardless of genre. The treble is bright and, as our reviewer noted, the low-end is "rich yet balanced, with propulsive, deep sub-bass and a detailed, clarified upper-bass." </p><p>Alongside the sound are pitch-perfect physical controls that sit on the outside of the anodized aluminum ear cups. The buttons have a reassuring travel to them, and the Digital Crown is a much better way of interacting with volume than touch controls in my honest opinion.</p><p>Finally, if you're a die-hard Apple user, then there's no substitute for the ease with which the AirPods plug into your existing setup. If you're working on a MacBook and suddenly get a call coming into your iPhone, the headlines will switch automatically. Done with work and pick up one of the best iPads to watch a video? The AirPods Max will follow along with you like a loyal puppy.</p><p>The only drawback I can really point to is that because they don't collapse, they aren't a good option as a pair of travel headphones. For everything else, though, the AirPods Max 2 are a great purchase. </p><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=audio&brands=Apple&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[ iOS 27 adds a clever new control for AirPods Adaptive mode ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/ios-27-beta-3-adds-a-clever-new-control-for-airpods-adaptive-mode</link>
                                                                            <description>
                            <![CDATA[ AirPods ambient noise blending is much easier to control thanks to this new iOS 27 method. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Bez9mis9X2CZN9M4jKGZwn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XNJSXRYLTSowpk9PEQvoJo-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 08 Jul 2026 05:45:00 +0000</pubDate>                                                                                                                                <updated>Mon, 20 Jul 2026 11:55:04 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/XNJSXRYLTSowpk9PEQvoJo-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple airpods pro 3]]></media:description>                                                            <media:text><![CDATA[Apple airpods pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[Apple airpods pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XNJSXRYLTSowpk9PEQvoJo-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p><a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27 </a>beta 3 introduces a faster way to adjust your AirPods' Adaptive mode intensity. Instead of digging through multiple settings menus to fine-tune ambient noise blending, you can now control everything directly from the primary settings page for your <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods</a> or <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro</a> using a streamlined new interface. </p><p>It's one of those quality-of-life improvements that makes everyday adjustments actually intuitive. If you've ever wished controlling Adaptive mode was more accessible, this update solves that problem. Here's how to find the new feature and use it.</p><h2 id="what-airpods-adaptive-mode-actually-does">What AirPods Adaptive mode actually does</h2><p>Adaptive mode blends Active Noise Cancellation and Transparency mode together, automatically adjusting to your changing environment. When you're on a relatively quiet street, it lets more ambient sound in so you're aware of your surroundings.</p><p>The system continuously monitors your environment, automatically scaling up noise cancellation to suppress sudden loud sounds and maintain a comfortable listening volume.</p><p>Adaptive mode balances isolation and awareness, but because preferences vary, customizable intensity adjustments let you fine-tune exactly how much ambient noise or blocking you want.</p><section class="howto-block">                    <h3> How to adjust Adaptive mode in iOS 27 beta 3</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/VVhnCCZu6xmju8pJ6PXgKo.jpg"                                        alt="Apple airpods pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/VVhnCCZu6xmju8pJ6PXgKo.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p><strong>Open Settings on your iPhone and scroll down to find your connected AirPods</strong>. Next,<strong> tap on the AirPods menu</strong> item. You'll see four Listening Mode options: Off, Transparency, Adaptive, and Noise Cancellation.</p><p><strong>Tap on Adaptive mode</strong> and you'll notice something new — small dots appear on either side of the Adaptive option. These dots let you adjust the intensity without leaving this screen. </p><p><strong>Tap the dot on the left to make Adaptive mode lighter</strong>, allowing more ambient noise through. Tap the dot on the right to make it stronger, increasing noise cancellation while still maintaining some environmental awareness.</p><p>That's the entire process. No sliders to drag, no buried audio settings to navigate, no multiple menus. Just tap left or right to dial in exactly how much outside noise you want. You can switch between default, lighter, and stronger intensity levels instantly.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4MKAW"></div>                            </div>                            <script src="https://kwizly.com/embed/e4MKAW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/airpods-finally-get-a-custom-eq-in-ios-27-here-is-how-to-fix-your-sound">AirPods finally get a custom EQ in iOS 27 — here is how to fix your sound</a></li><li><a href="https://www.tomsguide.com/audio/airpods/stop-using-your-airpods-like-basic-earbuds-3-features-youre-probably-overlooking">Stop using your AirPods like basic earbuds: 3 features you're probably overlooking</a></li><li><a href="https://www.tomsguide.com/phones/iphones/the-robot-voice-is-gone-how-to-make-siri-sound-truly-human-in-ios-27">iOS 27 beta now lets you customize Siri's pace and expressivity — here's how to do it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ AirPods Ultra 'almost certainly' hinted at in iOS 27 code — and they could be a huge audio (and camera) upgrade ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/airpods-ultra-almost-certainly-hinted-at-in-ios-27-code-and-they-could-be-a-huge-audio-and-camera-upgrade</link>
                                                                            <description>
                            <![CDATA[ A reference to an unreleased pair of AirPods has been found inside iOS 27 beta 2, and it lends weight to rumors of a very powerful upgrade. But other reports say development is suspended. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">3wqyH6yDMu7Gc7UEeNkoQ5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XNJSXRYLTSowpk9PEQvoJo-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 06 Jul 2026 11:35:11 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/XNJSXRYLTSowpk9PEQvoJo-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple airpods pro 3]]></media:description>                                                            <media:text><![CDATA[Apple airpods pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[Apple airpods pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XNJSXRYLTSowpk9PEQvoJo-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>A reference to what is "almost certainly" a <a href="https://www.tomsguide.com/audio/earbuds/airpods-ultra-are-in-the-works-everything-we-know-so-far">new pair of AirPods</a> has been spotted in the code for Apple's iOS 27 beta 2 by developer Sam Henri Gold — which when you line up the features with recent leaks, it matches up with the much rumored AirPods Ultra.</p><p>The <strong>code includes a mention of a system prompt for a product codenamed B790</strong> to work with <a href="https://www.tomsguide.com/phones/iphones/iphone-visual-intelligence-how-a-plumbing-problem-stopped-me-from-being-a-complete-hater">Visual Intelligence</a>. While Henri Gold initially assumed this was referring to <a href="https://www.tomsguide.com/computing/smart-glasses/apple-glasses-could-be-the-next-apple-watch-and-send-shockwaves-through-the-eyewear-industry-heres-how-it-could-disrupt-a-usd200-billion-market">Apple's long-rumored smart glasses</a>, the team at <a href="https://www.macrumors.com/2026/07/03/ios-27-beta-hints-at-new-apple-product/" target="_blank">MacRumors</a> pointed out the <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review"><strong>AirPods Pro 3</strong></a><strong> were codenamed B788</strong>. So, he revised his finding, saying that "B790 is almost certainly the new AirPods and not glasses."</p><div class="see-more see-more--clipped"><blockquote class="twitter-tweet hawk-ignore" data-lang="en"><p lang="en" dir="ltr">/System/Library/AssetsV2/com_apple_MobileAsset_UAF_IF_PlannerOverrides/purpose_auto/9aaa6a204118137235983cc3f1eecae8a125c550.asset/AssetData/PCC/system_prompt_metadata/system_prompt.json seems to hint at some smart glasses codenamed B790 pic.twitter.com/IEmbfleth4<a href="https://twitter.com/cantworkitout/status/2073011675880444246">July 3, 2026</a></p></blockquote><div class="see-more__filter"></div></div><p>Why a pair of AirPods would need access to Visual Intelligence is down to another persistent rumor we've been hearing for some time: <strong>the </strong><a href="https://www.tomsguide.com/audio/airpods/airpods-ultra-with-cameras-are-nearly-ready-heres-4-features-you-need-to-know"><strong>next AirPods may have integrated cameras</strong></a>. These won't be designed for taking pictures or video like the <a href="https://www.tomsguide.com/computing/smart-glasses/meta-ray-ban-display-review">Meta Ray-Ban Display smart glasses</a>, but instead <strong>they'll act as visual input for Siri</strong>.</p><p>The new earbuds, dubbed <a href="https://www.tomsguide.com/audio/earbuds/airpods-ultra-are-in-the-works-everything-we-know-so-far">AirPods Ultra</a>, are believed to be dropping in 2027 according to an earlier report from <a href="https://www.bloomberg.com/news/articles/2026-06-16/apple-plans-camera-airpods-iphone-foldable-2-20th-anniversary-iphone-in-2027" target="_blank">Bloomberg</a>. In practice, <strong>users wearing them will be able to ask Siri about their surroundings without having to use their iPhone camera to provide context.</strong> Reportedly, the design will remain the same as the current AirPods Pro apart from small LEDs that display when the earbuds are capturing information from the outside world.</p><p>The timeline makes sense. Apple <a href="https://www.tomsguide.com/phones/iphones/i-spent-a-week-with-siri-ai-here-are-my-honest-pros-and-cons">revealed the AI-powered Siri</a> this spring at WWDC and aims to follow up with the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">iPhone Fold / Ultra</a> in September. Next year, the company celebrates the 20th anniversary of the iPhone and is believed to be planning an ecosystem of AI products to accompany it.</p><h2 id="but-is-development-actually-happening">But is development actually happening?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5705px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hfk4whZfbRUQkweEGA87QS" name="AirPods Pro 3" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Hfk4whZfbRUQkweEGA87QS.jpg" mos="" align="middle" fullscreen="" width="5705" height="3209" 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>From that above snippet of news and the previous reports from the last few months, you'd assume the AirPods Ultra to be a done deal. However, over the weekend one particular leaker claimed development has been put on ice.</p><p>A leaker known as 'Kosutami' has taken to X with a blunt post saying the AirPods with cameras have been "suspended." We don't get any reasoning or proof of this, but the tweet has done enough to get mentioned in a variety of news posts — including this one.</p><div class="see-more see-more--clipped"><blockquote class="twitter-tweet hawk-ignore" data-lang="en"><p lang="en" dir="ltr">*Suspended. https://t.co/n8g9NwdxVn<a href="https://twitter.com/cantworkitout/status/2072910827318047057">July 3, 2026</a></p></blockquote><div class="see-more__filter"></div></div><p>I, for one, find it tough to imagine Apple would abandon a project like this. The company will be all too aware of discomfort from some consumers about cameras on wearables. </p><p>But if Apple sticks to its privacy-centric messaging and is able to meaningfully improve Siri's capabilities with this add-on, it would seem a logical next step. We already know AirPods are one of Apple's best-selling and most popular products, so using them to leverage Siri's abilities is a no-brainer providing the public gets on board with it. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XZQjKO"></div>                            </div>                            <script src="https://kwizly.com/embed/XZQjKO.js" async></script><p>Of course, all this is very early speculation since we're still around nine months out from spring 2027 and 14 away from next year's iPhone 20 September event. That's a long time to wait for the arrival of the AirPods Ultra and more than long enough for Apple's engineering team to get ahead of any problems or roadblocks. Like how are the cameras supposed to work for people with long hair? </p><p>At any rate, "suspended" and "cancelled" are two entirely different things. But let me know below if you think AI cameras in AirPods are a good idea. And in the meantime, you can actually get the non-camera equipped AirPods Pro 3 at <a href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow">a slight discount at Amazon right now</a>. </p><div class="product"><a data-dimension112="77bf042b-96cc-417c-bb7e-672598280553" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$222" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 3 bring the heat with 10 hours of battery life, improved sound, and superior active noise canceling. In our <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review" data-dimension112="77bf042b-96cc-417c-bb7e-672598280553" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$222">AirPods Pro 3 review</a> we said the Editor's Choice buds deliver the upgrade iPhone users have been waiting for with improved battery life, stronger noise cancellation, and smart new features like Live Translation, which delivers real-time translations to your ears. <a class="view-deal button" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow" data-dimension112="77bf042b-96cc-417c-bb7e-672598280553" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$222">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/phones/google-pixel-phones/android-17-officially-rolls-out-to-pixel-devices-with-new-features-screen-reactions-bubbles-gaming-mode-and-more">Android 17 officially rolls out to Pixel devices with new features — screen reactions, bubbles, gaming mode, and more</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-just-tested-the-phone-everybody-thinks-is-a-preview-of-the-iphone-fold-god-i-hope-theyre-wrong">I just tested the phone everybody thinks is a preview of the iPhone Fold — God, I hope they’re wrong</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-finally-brings-built-in-drawing-tools-to-ios-27-messages-heres-how-to-try-it">Apple finally brings built-in drawing tools to iOS 27 Messages — here's how to try it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been using the AirPods Max 2 for 3 months — here's how they've held up ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/ive-been-using-the-airpods-max-2-for-3-months-heres-how-theyve-held-up</link>
                                                                            <description>
                            <![CDATA[ I've been using the AirPods Max 2 since March, and they've seriously impressed me. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">sYCMhVzQPhzzRBJNRSr7jR</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SuHi77PnUWBh5LTUcebjPF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 05 Jul 2026 07:45:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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 senior 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. She has a strong interest in audio gear and the music world. &lt;/p&gt;&lt;p&gt;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 novels, or stressing over NYT Games.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/SuHi77PnUWBh5LTUcebjPF-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:description>                                                            <media:text><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:text>
                                <media:title type="plain"><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SuHi77PnUWBh5LTUcebjPF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Way back at the end of March, I was lucky enough to be one of the first people to test the new <a href="https://www.tomsguide.com/audio/headphones/apple-airpods-max-2-review">AirPods Max 2</a>. With an all-new H2 chip, improved ANC, and a more vibrant sound, they were (and still are) some of the <a href="https://www.tomsguide.com/us/best-headphones,review-1988.html">best headphones</a> I've ever had the pleasure of using. </p><p>But not everything came new and improved. Much to everyone's chagrin, Apple made zero upgrades to the design or battery on the AirPods Max 2. This decision was a little baffling, if you ask me. The most common complaints with the predecessor? Poor battery life and extremely heavy weight. So why didn't Apple fix these for the "upgraded" version? </p><p>Alas, this is still a mystery, but three months later, I've spent a <em>lot</em> of time with the new AirPods Max 2. I've been using them as I'd use my normal headphones — at work, on the bus, at the gym, out and about — and I'm intimately familiar with them now.</p><div class="product"><a data-dimension112="1812e3a9-0ce5-4c50-953a-5ca5541f1386" data-action="Deal Block" data-label="The AirPods Max 2 are just $499 right now on Amazon, which is a great early discount for this new product, albeit not as low as Prime Day or Black Friday prices. As it stands, the AirPods Max 2 are my favorite over-ears." data-dimension48="The AirPods Max 2 are just $499 right now on Amazon, which is a great early discount for this new product, albeit not as low as Prime Day or Black Friday prices. As it stands, the AirPods Max 2 are my favorite over-ears." data-dimension25="$499" href="https://www.amazon.com/Apple-Headphones-Cancellation-Personalized-Translation/dp/B0GSS4SGZR" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1141px;"><p class="vanilla-image-block" style="padding-top:131.46%;"><img id="yhaxpUGyinSQi4P2276rrF" name="AirPods Max 2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yhaxpUGyinSQi4P2276rrF.png" mos="" align="middle" fullscreen="" width="1141" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Max 2 are just $499 right now on Amazon, which is a great early discount for this new product, albeit not as low as Prime Day or Black Friday prices. As it stands, the AirPods Max 2 are my favorite over-ears.<a class="view-deal button" href="https://www.amazon.com/Apple-Headphones-Cancellation-Personalized-Translation/dp/B0GSS4SGZR" target="_blank" rel="nofollow" data-dimension112="1812e3a9-0ce5-4c50-953a-5ca5541f1386" data-action="Deal Block" data-label="The AirPods Max 2 are just $499 right now on Amazon, which is a great early discount for this new product, albeit not as low as Prime Day or Black Friday prices. As it stands, the AirPods Max 2 are my favorite over-ears." data-dimension48="The AirPods Max 2 are just $499 right now on Amazon, which is a great early discount for this new product, albeit not as low as Prime Day or Black Friday prices. As it stands, the AirPods Max 2 are my favorite over-ears." data-dimension25="$499">View Deal</a></p></div><h2 id="sound-quality-connectivity-style-top-marks-all-round">Sound quality? Connectivity? Style? Top marks all round</h2><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="SusawEdjBMCisMriTJVuRF" name="AirpodsMax2_13.JPG" alt="the apple airpods max 2 in blue photographed against a blue tom's guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls" src="https://cdn.mos.cms.futurecdn.net/SusawEdjBMCisMriTJVuRF.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 AirPods Max 2 are the best-sounding headphones at this price point, and I'm sorry to say this, but there's very little competition. While the <a href="https://www.tomsguide.com/audio/over-ear-headphones/bose-quietcomfort-ultra-headphones-2nd-generation-review">Bose QuietComfort Ultra</a> ($449) have superior ANC and comfort, the sound is too bassy and muddy for my personal sonic palate. And while the <a href="https://www.tomsguide.com/audio/over-ear-headphones/sony-wh-1000xm6-review">Sony WH-1000XM6</a> ($459) are, again, much comfier and have better call quality, there's some vibrancy missing in the sound for me. </p><p>But the AirPods Max 2 sound perfect. I honestly could not improve them. They sound so good that I forget I'm wearing headphones and feel like the music is traveling directly from the artist's mouth into my brain. The treble is clear and vibrant, the mids are balanced, detailed, and expansive, and the bass is well-rounded and rich without overpowering soft details. Yep, I have nothing bad to say about the sound quality at all. It's my perfect signature.</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="AXejktPxeoGE9bhCYDCfvE" name="AirpodsMax2_05.JPG" alt="the apple airpods max 2 in blue photographed against a blue tom's guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls" src="https://cdn.mos.cms.futurecdn.net/AXejktPxeoGE9bhCYDCfvE.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>Connectivity is another thing I take really seriously. I want my headphones to move with me, from my phone to my laptop, and back to my phone again. Thankfully, because I have an iPhone and a MacBook, the AirPods Max 2 do just that. I can listen on all my Apple devices without having to fiddle with my settings, and this is a luxury I can't live without now. </p><p>Last, and also kind of least, is the style. I'm not the kind of person who will buy headphones purely for aesthetics, but it helps when they're pretty. Thankfully, the AirPods Max 2 are <em>supremely</em> pretty. The anodized aluminum ear cups are super premium and the minimalist, sleek Apple design is so simple yet effective. No egregious touch controls (unlike Bose QuietComfort Ultra and Sony WH-1000XM6) and a weight-bearing mesh headband make these my perfect headphones. </p><p>Sorry, but I'm an AirPods Max 2 apologist. I feel like Apple designed them just for me.</p><h2 id="but-those-ai-features-i-ve-not-touched-them-once">But those "AI features"? I've not touched them once</h2><p>Some people may disagree with me here, and that's fine. Life would be boring if we all shared the same opinions! But I'm not the kind of person who wants, or needs, AI in her headphones. I've gone my whole life without having a (disobedient, cloth-eared) personal assistant living in my headphones, so why would I need one now? </p><p>The Live Translation feature? Sure, I've used it for fun. I've used it after my Duolingo lessons to check I've got my pronunciation right. I used to live in South Korea, so I've used it to test my (dwindling) Korean skills. </p><div><blockquote><p>"Siri is a glorified egg timer at this point."</p></blockquote></div><p>But I've not used it for its intended purpose, and I really don't think I will. </p><p>The same can be said for the "improved" Siri integration. Siri is a glorified egg timer at this point, and I just use my brain instead of asking Siri. The likelihood is, she wouldn't listen anyway. Girl's got serious obedience issues — she needs military school, stat.</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="nFPs5Ghr52dnnH6VigML2F" name="AirpodsMax2_03.JPG" alt="the apple airpods max 2 in blue photographed against a blue tom's guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls" src="https://cdn.mos.cms.futurecdn.net/nFPs5Ghr52dnnH6VigML2F.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>Of course, don't take my negativity as gospel. You may love having these features. Maybe you're always on vacation and need to communicate with people who don't speak your language, or you're super busy and need to check your calendar hands-free. But that's just not me. </p><p>These features are great if you need them, but don't ditch your non-smart headphones if you're anything like me.</p><h2 id="but-they-re-not-for-everyone">But they're not for everyone</h2><p>There are three types of people who should not buy the AirPods Max 2.</p><ol start="1"><li>No iPhone? No MacBook? No iPad? Don't get the AirPods Max 2.</li><li>Can't drop $500 on headphones? Don't get the AirPods Max 2.</li><li>Want "audiophile" sound? Don't get the AirPods Max 2.</li></ol><p>There's very little point in investing in <em>extremely</em> expensive headphones if you don't have the ecosystem they're built for. Even though you can <a href="https://www.tomsguide.com/audio/headphones/can-you-use-airpods-max-2-with-android">use AirPods Max 2 with an Android phone</a>, you don't get the full experience. You can't customize any settings or take advantage of the AI smart features. </p><p>If you have an Android, I would recommend getting the Sony WH-1000XM6 instead, which are some of the best headphones you can get, period. </p><div><blockquote><p>There's very little point in investing in extremely expensive headphones if you don't have the ecosystem they're built for.</p></blockquote></div><p>Again, if you can't afford $500 on headphones (me neither), then you shouldn't buy the AirPods Max 2. To put it kindly, they're overpriced. I would go for the <a href="https://www.tomsguide.com/audio/headphones/soundcore-space-one-pro">Soundcore Space One Pro</a>, <a href="https://www.tomsguide.com/audio/headphones/jbl-live-780nc-review">JBL Live 780NC</a>, or the <a href="https://www.tomsguide.com/audio/headphones/cmf-by-nothing-headphone-pro-review">CMF Headphone Pro</a>. At $199, $249, and $99 respectively, these headphones sound good, look cool, and won't break your bank. </p><p>And, finally, arguably the touchiest of all subjects — sound quality. Don't get me wrong, I love how the AirPods Max 2 sound. They scratch that audio itch perfectly. But I know Apple's sound signature can upset some people. In that case, you should invest more in headphones like the <a href="https://www.tomsguide.com/audio/over-ear-headphones/bang-and-olufsen-beoplay-h95-review-headphones">Bang & Olufsen Beoplay H95</a> or the <a href="https://www.tomsguide.com/audio/over-ear-headphones/i-just-tested-these-impeccable-hi-res-headphones-and-they-blow-away-the-airpods-max">Bowers & Wilkins Px8 S2</a>. Both headphones offer superior sound — and an even steeper price tag to match.</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="4uNmY7JqyhibRAvrENSNQF" name="AirpodsMax2_11.JPG" alt="the apple airpods max 2 in blue photographed against a blue tom's guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls" src="https://cdn.mos.cms.futurecdn.net/4uNmY7JqyhibRAvrENSNQF.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>Am I going to keep using the AirPods Max 2? 100%. They are my perfect headphones. As someone who takes connectivity, ANC, and sound quality seriously (everything else I can take or leave), the AirPods Max 2 are ideal. They automatically switch between my MacBook and my iPhone and they block out every speck of sound. Of course, the best part is the sound quality — Apple's sound signature must have been designed solely for me. It's everything I want and more. </p><p>Even so, I know the AirPods Max 2 are overpriced, and that battery life makes them a pretty controversial product. But what do you think? Let me know your thoughts in the comments. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XjPbQW"></div>                            </div>                            <script src="https://kwizly.com/embed/XjPbQW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/audio/9-anker-headphones-and-speakers-i-recommend-for-your-next-summer-getaway"><strong>9 Anker headphones and speakers I recommend for your next summer getaway</strong></a></li><li><a href="https://www.tomsguide.com/audio/speakers/cambridge-audio-lr-s-review"><strong>I tested the minimalist Cambridge Audio L/R S — and they’re some of the most premium-feeling midrange speakers on the market</strong></a></li><li><a href="https://www.tomsguide.com/audio/speakers/ruark-audio-sabre-r-review"><strong>Ruark Audio Sabre-R review: Bookshelf speakers for grown-ups</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've tested every pair of AirPods and these are the only 2 deals I'd buy this Prime Day — including $150 off AirPods Max 2 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/ive-tested-every-pair-of-airpods-and-these-are-the-only-2-deals-id-buy-this-prime-day-including-usd150-off-airpods-max-2</link>
                                                                            <description>
                            <![CDATA[ I've tested every pair of AirPods and these are my top Prime Day deals that are actually worth your time and money. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">HKqdviYtRQfQpDkY3ukRGn</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/SuHi77PnUWBh5LTUcebjPF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 24 Jun 2026 14:40:19 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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 senior 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. She has a strong interest in audio gear and the music world. &lt;/p&gt;&lt;p&gt;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 novels, or stressing over NYT Games.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/SuHi77PnUWBh5LTUcebjPF-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:description>                                                            <media:text><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:text>
                                <media:title type="plain"><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/SuHi77PnUWBh5LTUcebjPF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As someone both deep in the Apple ecosystem and a music lover, I know a thing or two about AirPods. I've tested every single pair of AirPods — so the <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a>, <a href="https://www.tomsguide.com/audio/ive-been-using-the-airpods-4-for-6-months-what-i-like-and-dont">AirPods 4 ANC</a>, <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a>, and the <a href="https://www.tomsguide.com/audio/headphones/apple-airpods-max-2-review">AirPods Max 2</a>. I know which ones are worth the high Apple price tag, and which don't pull their weight. </p><p>It just so happens that all of these AirPods are discounted right now thanks to Prime Day. You can save a huge $150 off the brand-new AirPods Max 2 — the over-ears' first-ever discount, by the way — and you can save $60 on the AirPods Pro 3. </p><p>But which of these models is actually the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best earbuds</a> money can buy? Are the AirPods Max 2 actually the <a href="https://www.tomsguide.com/us/best-headphones,review-1988.html">best headphones</a> nowadays? I'll tell you exactly which pairs you should buy and which you should skip — and I'll even throw in some cheaper alternatives. </p><h2 class="article-body__section" id="section-the-airpods-i-d-recommend"><span>The AirPods I'd recommend</span></h2><div class="product"><a data-dimension112="71bcda9c-ab1f-40a8-b728-d9e887094567" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$179" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review" data-dimension112="71bcda9c-ab1f-40a8-b728-d9e887094567" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$179">AirPods Pro 3</a> are some of the best wireless earbuds you can get nowadays, especially if you have an iPhone, iPad, or MacBook. The sound quality is industry-leading, the noise cancellation improved, and you get a plethora of smart features like heart rate monitoring. I recommend these earbuds to everyone who values sound quality, crazy ANC, and smart features. At $179, they're super affordable right now, too. <strong>I would grab these before Prime Day is over!</strong><a class="view-deal button" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow" data-dimension112="71bcda9c-ab1f-40a8-b728-d9e887094567" data-action="Deal Block" data-label="AirPods Pro 3" data-dimension48="AirPods Pro 3" data-dimension25="$179">View Deal</a></p></div><div class="product"><a data-dimension112="9c683eba-06a6-4123-80ad-f4423f9bc66b" data-action="Deal Block" data-label="reviewed the AirPods Max 2" data-dimension48="reviewed the AirPods Max 2" data-dimension25="$399" href="https://www.amazon.com/gp/aw/d/B0GSS72GZJ" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1141px;"><p class="vanilla-image-block" style="padding-top:131.46%;"><img id="yhaxpUGyinSQi4P2276rrF" name="AirPods Max 2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/yhaxpUGyinSQi4P2276rrF.png" mos="" align="middle" fullscreen="" width="1141" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I <a href="https://www.tomsguide.com/audio/headphones/apple-airpods-max-2-review" data-dimension112="9c683eba-06a6-4123-80ad-f4423f9bc66b" data-action="Deal Block" data-label="reviewed the AirPods Max 2" data-dimension48="reviewed the AirPods Max 2" data-dimension25="$399">reviewed the AirPods Max 2 </a>when they came out in April and they are seriously the best over-ear headphones for Apple users. The sound quality is vibrant, energetic, and fun, and they look great, too. I wholeheartedly recommend these headphones to every iPhone user who can afford them — but you should <strong>only buy them while discounted</strong>. Now is the perfect time to buy.<a class="view-deal button" href="https://www.amazon.com/gp/aw/d/B0GSS72GZJ" target="_blank" rel="nofollow" data-dimension112="9c683eba-06a6-4123-80ad-f4423f9bc66b" data-action="Deal Block" data-label="reviewed the AirPods Max 2" data-dimension48="reviewed the AirPods Max 2" data-dimension25="$399">View Deal</a></p></div><p>I have a pair of the AirPods Pro 2, AirPods Pro 3, and the AirPods Max 2, and while you can't get the Pro 2 anymore, they're the earbuds that started my love affair with Apple's audio gear. </p><p>The <a href="https://www.tomsguide.com/audio/headphones/apple-airpods-max-2-review">AirPods Max 2</a> are my personal favorite over-ear headphones in the world. The sound quality is just unbeatable at this price point, they look great thanks to the anodized aluminum ear cups, and the button controls are straightforward. No messing around with egregious touch controls (like Bose, or Sony...) and no unwanted interruptions due to an errant finger. The battery life could be better, but this is something I can forgive.</p><p>The <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> are the best iPhone earbuds you can get — the sound quality is rich, bassy, but detailed and vibrant. The silicone ear tip and algorithm help block out literally 99% of ambient noise, and the 8-hour battery life is a great improvement on the previous model. </p><p>I recommend both of these AirPods with every fiber of my being. </p><h2 class="article-body__section" id="section-the-airpods-i-wouldn-t-recommend-yet"><span>The AirPods I wouldn't recommend (yet!)</span></h2><div class="product"><a data-dimension112="9953adc4-3811-4506-ab86-041d8ad6a783" data-action="Deal Block" data-label="The AirPods 4 are as bare-bones as AirPods come, but they're still packed with features. There's no ANC on this model, but you get Spatial Audio. 5 hours of battery isn't the best, but they're a great first pair of AirPods. I would recommend these if you're an iPhone user on a low budget, but I would only buy them for their $69 sale price." data-dimension48="The AirPods 4 are as bare-bones as AirPods come, but they're still packed with features. There's no ANC on this model, but you get Spatial Audio. 5 hours of battery isn't the best, but they're a great first pair of AirPods. I would recommend these if you're an iPhone user on a low budget, but I would only buy them for their $69 sale price." data-dimension25="$99" href="https://www.amazon.com/dp/B0DGHMNQ5Z/" 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="kTKCG8gCBjg4vScr6CMgoN" name="AirPods 4 BG image.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kTKCG8gCBjg4vScr6CMgoN.jpg" mos="" align="middle" fullscreen="" width="1000" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods 4 are as bare-bones as AirPods come, but they're still packed with features. There's no ANC on this model, but you get Spatial Audio. 5 hours of battery isn't the best, but they're a great first pair of AirPods. I would recommend these if you're an iPhone user on a low budget, but I would <em>only</em> buy them for their <strong>$69</strong> sale price. <a class="view-deal button" href="https://www.amazon.com/dp/B0DGHMNQ5Z/" target="_blank" rel="nofollow" data-dimension112="9953adc4-3811-4506-ab86-041d8ad6a783" data-action="Deal Block" data-label="The AirPods 4 are as bare-bones as AirPods come, but they're still packed with features. There's no ANC on this model, but you get Spatial Audio. 5 hours of battery isn't the best, but they're a great first pair of AirPods. I would recommend these if you're an iPhone user on a low budget, but I would only buy them for their $69 sale price." data-dimension48="The AirPods 4 are as bare-bones as AirPods come, but they're still packed with features. There's no ANC on this model, but you get Spatial Audio. 5 hours of battery isn't the best, but they're a great first pair of AirPods. I would recommend these if you're an iPhone user on a low budget, but I would only buy them for their $69 sale price." data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="f40abac8-58f7-4648-96e1-61d0d1686e52" data-action="Deal Block" data-label="AirPods 4" data-dimension48="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:1080px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="QHd94h4XxrTnEq2dFytWnF" name="Apple AirPods 4" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/QHd94h4XxrTnEq2dFytWnF.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/earbuds/apple-airpods-4-review" data-dimension112="f40abac8-58f7-4648-96e1-61d0d1686e52" data-action="Deal Block" data-label="AirPods 4" data-dimension48="AirPods 4" data-dimension25="$149">AirPods 4 </a>are Apple's entry-level earbud — this is the ANC version — ideal for people who want great connectivity and sound without silicone ear tips or smart features. I would get these if you don't like silicone tips or if you want cheap earbuds, but I would <strong>wait</strong> until they're discounted to $99. <a class="view-deal button" href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJ7HYG1" target="_blank" rel="nofollow" data-dimension112="f40abac8-58f7-4648-96e1-61d0d1686e52" data-action="Deal Block" data-label="AirPods 4" data-dimension48="AirPods 4" data-dimension25="$149">View Deal</a></p></div><p>If you want entry-level AirPods, I would honestly wait until a bigger sale. The AirPods 4 and AirPods 4 ANC are good, but you can get better earbuds for cheaper — even when they're discounted. </p><p>If you need earbuds <em>right now</em>, I'd recommend grabbing the super-budget <a href="https://www.tomsguide.com/audio/earbuds/cmf-by-nothing-buds-pro-2-review">CMF by Nothing Buds Pro 2</a>, which have a Dirac-tuned EQ that fakes immersive 360° audio (and boy, does it work). These <a href="https://www.amazon.com/gp/aw/d/B0D83J6JJ9" target="_blank" rel="nofollow">earbuds are just $37 at Amazon</a> right now, which is just unfathomably cheap.</p><p>Then, if you <em>really</em> want AirPods later and they're majorly discounted, you can always grab them at $69-$99 instead. </p><h3 class="article-body__section" id="section-we-re-tracking-all-the-best-prime-day-headphones-deals"><span>We're tracking all the best Prime Day headphones deals</span></h3><div class="vizualizer-embed"><div class="tg-df-widget-host" data-widget-config="?search=audio&brands=Apple&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[ Forget the Apple Watch: I use AirPods Pro 3 for Live Heart Rate Tracking while running — and they’re $70 off right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/forget-the-apple-watch-i-use-airpods-pro-3-for-live-heart-rate-tracking-while-running-and-theyre-usd70-off-right-now</link>
                                                                            <description>
                            <![CDATA[ Don't wait till Prime Day! The AirPods Pro 3 have $70 right now ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7ZygRwoi6a2wahAfuF4oaj</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ASrqtvrpkjoDrqAgKxv8DG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 22 Jun 2026 13:33:17 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ jane.mcguire@futurenet.com (Jane McGuire) ]]></author>                    <dc:creator><![CDATA[ Jane McGuire ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/vV4Uj3e5TZvBqmmsjT2EU6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jane McGuire is Tom&#039;s Guide&#039;s Fitness Managing Editor, which means she looks after everything fitness-related — from running gear and fitness trackers to yoga mats and sports bras. An avid runner, Jane has tested and reviewed fitness products for the past five years, so she knows what to look for when finding a good running watch or a pair of shorts with pockets big enough for your smartphone, running gels, and house keys. &lt;/p&gt;&lt;p&gt;Jane has run six marathons — the London Marathon five times, and the Berlin Marathon once -and is still on a quest to tick off all of the marathon majors. Her marathon PR is 3:30, which she ran in the New Balance Supercomp Elite V5&#039;s, but she also spends a lot of time talking about her  ‘joy plan’, where she runs for happiness, not for PR’s. &lt;/p&gt;&lt;p&gt;Previous to Tom’s Guide, Jane worked for Runner’s World, where she co-hosted the Runner’s World podcast. She also presents on a YouTube channel called the Run Testers, alongside other running-mad journalists, where they review the latest shoes, kit, and tech. Her work has also appeared in Coach, Get Sweat Go, and Women’s Health. &lt;/p&gt;&lt;p&gt;When she&#039;s not pounding the pavements, you&#039;ll find Jane striding round the Surrey Hills, taking far too many photos of her spaniel, Toby. &lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ASrqtvrpkjoDrqAgKxv8DG-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a photo of the airpods pro 3]]></media:description>                                                            <media:text><![CDATA[a photo of the airpods pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[a photo of the airpods pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ASrqtvrpkjoDrqAgKxv8DG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As a fitness editor, I review the best fitness tech for a living, and one of the recent launches I’ve been most impressed with is the Apple AirPods Pro 3, which have built-in infrared sensors pulsing 256 times a second, tracking your heart rate from your ears. </p><p>I’ve used the AirPods Pro 3 for countless workouts, and love the ability to leave my watch behind and still get heart rate monitoring. My colleague Nick Harris-Fry tested the <a href="https://www.tomsguide.com/audio/airpods/i-compared-the-apple-airpods-pro-3s-heart-rate-readings-vs-a-chest-strap-and-the-results-shocked-me">heart rate monitor of the AirPods Pro 3 against a chest strap while running</a> and was also impressed. </p><p>These are, by far, some of the best workout headphones on the market, and the good news is, right now they are on sale in an early Amazon Prime Day deal. </p><div class="product"><a data-dimension112="206374c5-b7ed-4241-abbd-43152b3e7add" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$179" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 3 bring the heat with 10 hours of battery life, improved sound, and superior active noise canceling. In our <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review" data-dimension112="206374c5-b7ed-4241-abbd-43152b3e7add" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$179">AirPods Pro 3 review</a> we said the Editor's Choice buds deliver the upgrade iPhone users have been waiting for with improved battery life, stronger noise cancellation, and smart new features like Live Translation, which delivers real-time translations to your ears. $179 is an incredible price for these, and I think they'll sell out very fast.<a class="view-deal button" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG/" target="_blank" rel="nofollow" data-dimension112="206374c5-b7ed-4241-abbd-43152b3e7add" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$179">View Deal</a></p></div><p>To use the heart rate tracking on the buds, you need to start a workout in the Fitness app on your iPhone, where you’ll see the headphones connected and your live heart rate during workouts.</p><p>If you also have an <a href="https://www.tomsguide.com/best-picks/best-apple-watch">Apple Watch</a> connected, Apple says readings from the heart rate sensor on the watch and the headphones will both be looked at, and the most accurate one will be used for the workout recording.</p><p>During our testing, the AirPods Pro 3 have kept up with a heart rate monitor strapped to the chest, and have proven to be far more accurate than the <a href="https://www.tomsguide.com/audio/headphones/i-ran-150-miles-with-the-beats-powerbeats-pro-2-here-are-5-things-i-like-and-3-things-i-dont-like">Beats Powerbeats Pro 2</a>. </p><p>They also have a redesigned fit, and I’ve found them to be the most comfortable AirPods to date. I’ve worn them for 20-mile runs and found they’ve stayed perfectly in place. The biggest tactile change to the AirPods Pro 3 is the squishy tips at the end of the buds. This foam infusion feels different from the silicone used on the older models, and makes them a lot more comfortable for hours of wear.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Gurman: AI AirPods with cameras just tipped for 2027 launch in 'flurry of new releases' ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/gurman-ai-airpods-with-cameras-just-tipped-for-2027-launch-in-flurry-of-new-releases</link>
                                                                            <description>
                            <![CDATA[ AirPods Ultra could land in the second half of next year, alongside the 2027 iPhone release line-up. Here's what we know. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">u7U2RaWogDmtepjuFoZ3HA</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ViWtcPkNTZ7pzqdiMea4HD-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 17 Jun 2026 12:06:53 +0000</pubDate>                                                                                                                                <updated>Wed, 17 Jun 2026 12:07:35 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ViWtcPkNTZ7pzqdiMea4HD-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ViWtcPkNTZ7pzqdiMea4HD-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Multiple reports suggest Apple has big plans for an ecosystem of AI products, but the lack of progress with <a href="https://www.tomsguide.com/ai/apple-finally-fixed-siri-heres-all-the-features-for-the-new-siri-ai-announced-at-wwdc">Siri AI</a> has been an obstacle. Now that Siri AI has been unveiled, and set to roll out to iPhones later this year, progress can finally be made on those devices. That includes the long-rumored <a href="https://www.tomsguide.com/audio/earbuds/apple-reportedly-working-on-airpods-with-cameras-heres-what-they-could-do">camera-equipped AirPods</a>, which some have referred to as "AirPods Ultra."</p><p>According to a new report from <a href="https://www.bloomberg.com/news/articles/2026-06-16/apple-plans-camera-airpods-iphone-foldable-2-20th-anniversary-iphone-in-2027">Mark Gurman at Bloomberg</a>, Apple is set to release those AirPods sometime in late 2027. This means they will likely launch around the same time as the <a href="https://www.tomsguide.com/phones/iphones/iphone-20-leak-reveals-7-jaw-dropping-features-for-the-20th-anniversary-model">iPhone 20</a>, which is being released to commemorate the 20th anniversary of the original iPhone's release.</p><p>The report notes that the AirPods are set to be the <a href="https://www.tomsguide.com/audio/airpods/airpods-ultra-with-cameras-are-nearly-ready-heres-4-features-you-need-to-know">first wearable AI product Apple releases</a>, and will be <a href="https://www.tomsguide.com/audio/airpods/forget-airpods-pro-airpods-ultra-are-rumored-to-get-these-2-big-upgrades">built around communicating with Siri AI</a>. That includes being able to speak to the AI as normal, while also adding extra input via the AirPods' built-in cameras.</p><h2 id="how-the-airpods-ultra-will-work">How the AirPods Ultra will work</h2><p>The cameras themselves are not designed for recording video or taking photos, and are instead meant to offer Siri some visual input. The idea is that users can ask Siri about different objects or the environment, and have the AI understand what's going on without needing to look through an iPhone camera — as has been the case so far.</p><p>It's not entirely clear what kind of cameras are included, and past reports suggested that they could be infrared to enable hand gestures. However, considering Siri is supposed to be able to see things from those cameras, it's likely they're going to be pretty traditional camera lenses — albeit rather small and low-powered. If that's the case, it's going to be interesting to see how Apple stops these AirPods from being hacked or jailbroken in order to record video from your ears.</p><h2 id="what-airpods-ultra-could-look-like">What AirPods Ultra could look like</h2><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="ASdWQTCTF9zU3GEPCHyB5b" name="Airpods_pro 5.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/ASdWQTCTF9zU3GEPCHyB5b.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>Gurman says that these new AirPods will resemble the <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro</a>, with the only major design difference being the presence of both the camera and status LEDs that are visible to other people. Those lights are supposed to show others whenever the AirPods are sending data to the cloud for processing. </p><p>The AI AirPods were expected to launch this year, but the issues Apple faced with Siri saw them pushed back. Don't expect them to be the only AI wearables Apple has to offer, either. Gurman has reiterated that <a href="https://www.tomsguide.com/computing/smart-glasses/apples-ai-smart-glasses-strategy-revealed-how-the-iphone-maker-plans-to-outshine-metas-ray-bans">Apple's AI glasses</a> are supposed to launch at the end of next year too, and the <a href="https://www.tomsguide.com/computing/apples-ai-wearable-roadmap-is-getting-wild-prepare-for-ai-pendant-smart-glasses-and-airpods-with-cameras">rumored AI pendant</a> will likely arrive in the near future. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XZQjKO"></div>                            </div>                            <script src="https://kwizly.com/embed/XZQjKO.js" async></script><p>The AirPods are apparently further along the development process than both of these. The earbuds are said to have reached "advanced stages of development," with Apple actively testing them alongside <a href="https://www.tomsguide.com/phones/iphones/iphone-20-may-come-with-two-different-screen-sizes-and-launch-alongside-iphone-ultra-2">iPhone 20, iPhone Fold 2 and iOS 28</a>. </p><p>This seems a little early, considering we're still around 15 months out from the 2027 iPhone launch event. But I suppose being proactive about these things ensures problems can be solved early, rather than scrambling to fix them at the last possible minute.</p><p>It's going to be a long wait before these AirPods Ultra actually arrive, even if there aren't any issues that crop up over the next several months. But, hopefully, as time goes on we'll be hearing more leaks and rumors about what Apple has in store.</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/google-pixel-phones/android-17-officially-rolls-out-to-pixel-devices-with-new-features-screen-reactions-bubbles-gaming-mode-and-more">Android 17 officially rolls out to Pixel devices with new features — screen reactions, bubbles, gaming mode, and more</a></li><li><a href="https://www.tomsguide.com/phones/iphones/i-just-tested-the-phone-everybody-thinks-is-a-preview-of-the-iphone-fold-god-i-hope-theyre-wrong">I just tested the phone everybody thinks is a preview of the iPhone Fold — God, I hope they’re wrong</a></li><li><a href="https://www.tomsguide.com/phones/iphones/apple-finally-brings-built-in-drawing-tools-to-ios-27-messages-heres-how-to-try-it">Apple finally brings built-in drawing tools to iOS 27 Messages — here's how to try it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ AirPods finally get a custom EQ in iOS 27 — here is how to fix your sound ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/airpods-finally-get-a-custom-eq-in-ios-27-here-is-how-to-fix-your-sound</link>
                                                                            <description>
                            <![CDATA[ The new custom EQ feature in iOS 27 allows AirPods users to manually adjust bass, mids, and treble for a personalized audio experience. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">HreYZVwsTmDdBmNYmSaPrm</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aGsV2oXwfxKSe7BhHdpZuP-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 16 Jun 2026 09:52:24 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/aGsV2oXwfxKSe7BhHdpZuP-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Smartphone and AirPods]]></media:description>                                                            <media:text><![CDATA[Smartphone and AirPods]]></media:text>
                                <media:title type="plain"><![CDATA[Smartphone and AirPods]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aGsV2oXwfxKSe7BhHdpZuP-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's been a long time coming, but <a href="https://www.tomsguide.com/phones/iphones/ios-27-is-official-all-the-new-upgrades-and-features-announced-at-wwdc-2026">iOS 27</a> finally gives AirPods users control over their sound profile. The new AirPods custom EQ feature lets you adjust bass, midrange, and treble to match your listening preferences. </p><p>Whether you want to dial down heavy bass, boost vocals, or brighten the highs, the simple three-band EQ works for both audiophiles seeking precise control and casual listeners wanting better sound.</p><p>Here's exactly how to change your AirPods equalizer settings on compatible models.</p><figure class="inline-layout"><fw-embed-feed channel="toms_guide" playlist="gK4rJ8" mode="row" player_placement="bottom-right"></fw-embed-feed></figure><h2 id="which-airpods-models-support-custom-eq">Which AirPods models support custom EQ?</h2><p><strong>Custom EQ is available on AirPods Pro 3, AirPods Pro 2, and AirPods 4</strong>. The original AirPods Max and earlier models don't support this iOS 27 AirPods feature. You'll need iOS 27 running on your iPhone to access the AirPods custom EQ settings.</p><section class="howto-block">                    <h3>How to get the AirPods custom EQ early</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/xmPPToWs4zEYkwYjUHVrMS.jpg"                                        alt="AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/xmPPToWs4zEYkwYjUHVrMS.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>First, you'll need to register as an <a href="https://developer.apple.com/programs/enroll/" target="_blank">Apple developer.</a> Alternatively, if you have downloaded any Apple beta in the past, you can skip registration. Simply<strong> go to Settings > General > Software Update > Beta Updates and select the iOS 27 Developer Beta</strong>.</p><p>If you are using this previous-beta method and the iOS 27 option isn't appearing, make sure your iPhone is fully updated to the absolute latest version of your current beta cycle first.</p><p>Next, <strong>connect your AirPods and open Settings. Tap your AirPods name at the top of the screen, scroll down to AirPods Beta Updates, and toggle the feature on</strong>.</p><p>To complete the update, <strong>place your AirPods in their case, plug them in to charge, and keep them near your iPhone</strong>. The firmware will download automatically in the background. </p></p>                </section><section class="howto-block">                    <h3>How do you adjust the AirPods custom EQ sliders</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/LLNGsYFmwerjdu5vWPM5en.png"                                        alt="Custom EQ for AirPods"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/LLNGsYFmwerjdu5vWPM5en.png"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple)</div></figure>                    <p><p><strong>Open Settings</strong> <strong>on your iPhone and navigate to your AirPods settings</strong>. From there, <strong>select Audio and Routing</strong>, then <strong>tap Equalizer</strong>. You will see two options at the top of the screen: Recommended and Custom.</p><p>The Recommended option uses Apple's standard sound profile. <strong>Select</strong> <strong>Custom</strong> to unlock the manual three-band EQ.</p><p>The interface will display three distinct frequency sliders. <strong>Simply raise or lower the</strong> <strong>low frequencies (bass)</strong>, <strong>mid frequencies (vocals and instruments)</strong>, and <strong>high frequencies (treble)</strong> to match your preference.</p><p>You can use the play head at the top of the screen to control the currently playing music. This allows you to hear your EQ changes in real time as you move each slider.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-e4MKAW"></div>                            </div>                            <script src="https://kwizly.com/embed/e4MKAW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/phones/iphones/the-clever-ios-27-wallet-upgrade-that-means-you-will-never-have-to-carry-a-physical-loyalty-card-again">This clever iOS 27 Wallet upgrade means you'll never have to carry a physical loyalty card again</a></li><li><a href="https://www.tomsguide.com/phones/iphones/you-dont-have-to-wait-for-apples-siri-ai-rollout-use-this-trick-to-unlock-it-on-ios-27-right-now">You don’t have to wait for Apple’s Siri AI rollout — use this trick to unlock it on iOS 27 right now</a></li><li><a href="https://www.tomsguide.com/phones/iphones/your-iphone-alarm-and-ringtone-dont-have-to-share-a-volume-slider-anymore-heres-how-to-split-them-in-ios-27">Your iPhone alarm and ringtone don’t have to share a volume slider anymore — here’s how to split them in iOS 27</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Your smartphone has hidden settings that protect your hearing — here's how to enable them ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/your-smartphone-has-hidden-settings-that-protect-your-hearing-heres-how-to-enable-them</link>
                                                                            <description>
                            <![CDATA[ Learn how to set volume limits and hearing protection alerts on iPhone and Android to prevent hearing damage from headphones. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5LL4PKPMpARbvegS4CXCKH</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/YxRm6Az2tYdUsWnHyUGZFF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 03 Jun 2026 06:15:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/xHn6RmpEqg87cvtLwrBu9G.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/YxRm6Az2tYdUsWnHyUGZFF-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:description>                                                            <media:text><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:text>
                                <media:title type="plain"><![CDATA[the apple airpods max 2 in blue photographed against a blue tom&#039;s guide background, showing the mesh headband, anodized aluminum ear cups, carry case, and controls]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/YxRm6Az2tYdUsWnHyUGZFF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Headphone volume creeps up over time. You start at a reasonable level, then gradually increase it to compensate for ambient noise, distraction, or just habit. Before you realize it, you're listening at levels that damage your hearing. The damage is permanent and often goes unnoticed until it's too late.</p><p>Your phone has built-in settings designed to prevent this. Both Apple and Google included hearing protection features that either cap volume automatically or alert you when you're pushing into dangerous territory. Many people never actually find these settings because they're buried in menus designed for accessibility. </p><p>Here's where they are and how to enable them.</p><section class="howto-block">                    <h3>iPhone hearing protection settings </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/aGsV2oXwfxKSe7BhHdpZuP.jpg"                                        alt="Smartphone and AirPods"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/aGsV2oXwfxKSe7BhHdpZuP.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p><strong>Open the Settings app</strong> on your iPhone and <strong>tap "Sounds and Haptics." </strong>Then scroll down and <strong>tap "Headphone Safety."</strong> You'll see two features here.</p><p><strong>Enable Headphone Notifications:</strong> Turn this on and your phone will send alerts when your listening habits approach dangerous volume levels. Your device monitors decibel exposure over time and warns you before hearing damage occurs.</p><p><strong>Enable Reduce Loud Audio:</strong> This feature sets a maximum decibel level for your device. If you play audio above that limit, your phone automatically reduces the volume. You set the decibel cap yourself — Apple recommends 85dB as a safe listening level based on <a href="https://www.who.int/news-room/questions-and-answers/item/deafness-and-hearing-loss-safe-listening" target="_blank">World Health Organization (WHO) guidelines</a>, though you can adjust this lower if you prefer.</p><p>Once enabled, these features run automatically. You don't have to do anything except keep the settings active.</p></p>                </section><section class="howto-block">                    <h3>Android hearing protection settings </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/H6j95jijXbATLvFUnnMFeE.jpg"                                        alt="Google Pixel Buds 2 Pro playing music"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/H6j95jijXbATLvFUnnMFeE.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>If you use Google Pixel Buds with an Android phone, Google's Hearing Wellness feature works similarly to Apple's approach.</p><p>For Pixel phones running Android 10+: <strong>Open Settings and tap "Connected Devices." </strong>Then <strong>select "Settings" next to your paired Pixel Buds</strong>. Then all you have to do is <strong>tap "Hearing Wellness" </strong>to access the feature.</p><p>For other Android devices, <strong>open the Pixel Buds app and tap "Hearing Wellness."</strong></p><p>Once you've accessed Hearing Wellness, <strong>turn it on</strong>. The feature tracks your listening habits and shows you how your current volume levels compare to safe exposure limits. You can see real data about when you're pushing into dangerous territory.</p><p>Also, <strong>enable Volume Level Notifications</strong>. Turn this on and your phone will send alerts when you're approaching unsafe listening levels, similar to Apple's approach. You get notified before damage occurs.</p></p>                </section><h2 id="why-these-settings-make-a-difference">Why these settings make a difference </h2><p>Headphone notifications work by monitoring sound exposure over time. Most hearing damage from headphones happens gradually and silently, you don't notice it happening. These alerts catch the problem before permanent damage occurs.</p><p>Automatic volume limiting provides passive protection. Even if you forget about hearing safety, the phone enforces a safe listening level automatically. You literally can't exceed the decibel cap no matter how high you try to turn the volume.</p><p>Neither feature is perfect. Notifications require you to pay attention and change behavior. Volume limiting can feel frustrating if it cuts off music at what feels like normal volume. But both are better than discovering hearing loss years later when it's irreversible.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XjPmQW"></div>                            </div>                            <script src="https://kwizly.com/embed/XjPmQW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/audio/airpods/stop-using-your-airpods-like-basic-earbuds-3-features-youre-probably-overlooking">Stop using your AirPods like basic earbuds: 3 features you're probably overlooking</a></li><li><a href="https://www.tomsguide.com/audio/your-deep-clean-is-exactly-whats-ruining-your-earbuds-says-audio-professional">Your 'deep clean' is exactly what's ruining your earbuds, says audio professional</a></li><li><a href="https://www.tomsguide.com/audio/your-earbuds-are-damaging-your-hearing-3-warning-signs-youre-ignoring">Your earbuds are damaging your hearing — 3 warning signs you're ignoring</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple raises trade-in value for products — here's how much more you'll get for an old iPhone, iPad, MacBook or Apple Watch ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/hardware/apple-raises-trade-in-value-for-products-heres-how-much-more-youll-get-for-an-old-iphone-ipad-macbook-or-apple-watch</link>
                                                                            <description>
                            <![CDATA[ Apple has raised trade-in prices for its products in the US, here's the full list of what you can expect. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">KK7BicT78LGdo9Cio3L5XQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qJL3bookpxHcLaHpqtC4YQ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 29 May 2026 10:38:35 +0000</pubDate>                                                                                                                                <updated>Fri, 29 May 2026 10:53:42 +0000</updated>
                                                                                                                                            <category><![CDATA[Computing Hardware]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Computing Peripherals]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/qJL3bookpxHcLaHpqtC4YQ-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[iPhone 13 on display inside Apple Store]]></media:description>                                                            <media:text><![CDATA[iPhone 13 on display inside Apple Store]]></media:text>
                                <media:title type="plain"><![CDATA[iPhone 13 on display inside Apple Store]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qJL3bookpxHcLaHpqtC4YQ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In a world where everything is getting more expensive, Apple seems to be quietly making some pretty solid choices that benefit the budget-conscious among us. First, the company launched the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a>, which we called the "best budget laptop ever" in <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">our review</a>. Now, the company is going to pay you back more cash for trading in your old devices.</p><p>As spotted by <a href="https://www.macrumors.com/2026/05/27/apple-updates-trade-in-values-may-2026/" target="_blank">MacRumors</a>, Apple has updated its trade-in estimates and raised the value of several iPhone, iPad, MacBook, and Apple Watch models. It's not entirely altruistic, of course — Apple is <a href="https://www.tomsguide.com/phones/iphones/apple-confirms-significantly-higher-memory-costs-and-that-means-iphone-and-mac-price-hikes-are-almost-certainly-on-the-way">facing the effects of the RAM crisis</a> as much as any company and being able to rescue and reuse old components is a benefit.</p><p>Still, what's interesting is that while raising the price offered for its own products, Apple has also <em>reduced</em> the amount it's willing to pay for Android trade-ins.</p><p>Here are the new rates Apple will estimate for trade-ins. That "estimate" qualifier is important; the value you're offered will largely depend on the device's condition.</p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X7Dqve"></div>                            </div>                            <script src="https://kwizly.com/embed/X7Dqve.js" async></script><h3 class="article-body__section" id="section-iphone-and-ipad"><span>iPhone and iPad</span></h3><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="hz3rwttT99W2rrrb3dhr4c" name="iPhone 16 Plus-1.jpg" alt="Apple iPhone 16 Plus Review." src="https://cdn.mos.cms.futurecdn.net/hz3rwttT99W2rrrb3dhr4c.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>Trade-ins for the<a href="https://www.tomsguide.com/phones/iphones/iphone-17-vs-iphone-16-comparison"> iPhone 16 family</a> have increased by $10 for the Pro Max, Pro and Plus models and $25 for the regular iPhone 16.</p><p>Meanwhile, at the other end of the scale, you can still get up to $35 for the iPhone 8 and $45 for the iPhone 8 Plus. </p><ul><li><strong>iPhone 16 Pro Max: </strong>Up from $685 to $695</li><li><strong>iPhone 16 Pro</strong>: Up from $550 to $560</li><li><strong>iPhone 16 Plus</strong>: Up from $455 to $465</li><li><strong>iPhone 16</strong>: Up from $435 to $460</li></ul><p>For a current iPad, you will now get an extra $20 for a Pro in good condition and an extra $15 for other models.</p><ul><li><strong>iPad Pro</strong>: Up from $670 to $690</li><li><strong>iPad Air</strong>: Up from $445 to $460</li><li><strong>iPad</strong>: Up from $220 to $235</li><li><strong>iPad mini</strong>: Up from $250 to $265</li></ul><h3 class="article-body__section" id="section-macbook"><span>MacBook</span></h3><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>The estimated trade-in prices for the MacBook are a little less clear-cut. While Apple has increased the value of the current MacBook Pro, MacBook Air and Mac mini, the iMac remains unchanged. Meanwhile, the Mac Pro drops from $2,090 to $2,045.</p><ul><li><strong>MacBook Pro</strong>: Up from $685 to $690</li><li><strong>MacBook Air</strong>: Up from $485  to $520</li><li><strong>Mac mini</strong>: Up from $340 to $375</li><li><strong>Mac Pro</strong> Down from $2,090 to $2,045</li></ul><h3 class="article-body__section" id="section-apple-watch"><span>Apple Watch</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3840px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ZMFKsFdi35Dgri7foxHEG6" name="Apple Watch Ultra 3-1" alt="Apple Watch Ultra 3" src="https://cdn.mos.cms.futurecdn.net/ZMFKsFdi35Dgri7foxHEG6.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>If you're looking to trade-in an old Apple Watch, then you'll get an extra $10 in estimations for the Ultra 2 and the Apple Watch Series 9. </p><p>However, the last-gen Apple Watch Series 10 remains unchanged at up to $150, while the first-generation Apple Watch Ultra estimation has actually gone <em>down</em> by $10.</p><ul><li><strong>Apple Watch Ultra 2</strong>: Up from $295 to $305</li><li><strong>Apple Watch Series 9</strong>: Up from $120 to $130</li><li><strong>Apple Watch Ultra</strong>: Down from $215 to $205</li></ul><h2 id="final-thoughts">Final thoughts</h2><p>Apple's <a href="https://www.apple.com/shop/trade-in" target="_blank">trade-in program</a> is good, but it's likely that you'll be able to get more for your older devices by selling yourself through a service like eBay or Amazon. Of course, what Apple does offer is convenience as well as a certainty that your electronics will be recycled wherever possible — which isn't going to happen if they go into landfill.</p><p>Also, it's worth remembering that Apple won't give you cold, hard cash for your old devices. The company's trade-in amounts to credit on another purchase or on an Apple Gift Card. Which might not be a bad thing, with Father's Day on the horizon.</p><p>Finally, Apple states, "Trade-in values will vary based on the condition, year, and configuration of your eligible trade-in device." So if your Apple Watch or MacBook is particularly beat up and well-used, you may not see as much for it as you hoped.</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/buying-a-new-phone-heres-how-to-avoid-paying-for-pricey-storage-upgrades">Buying a new phone? Here's how to avoid paying for pricey storage upgrades</a></li><li><a href="https://www.tomsguide.com/phones/motorola-phones/get-a-free-motorola-razr-fold-2026-at-t-mobile-heres-how-to-get-yours">Get a free Motorola Razr Fold 2026 at T-Mobile — here's how to get yours</a></li><li><a href="https://www.tomsguide.com/gaming/gaming-peripherals/id-buy-these-12-gaming-peripherals-from-amazon-over-and-over-again">I'd buy these 12 gaming peripherals from Amazon over and over again</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Amazon's Memorial Apple deals are here! From AirPods to MacBooks, here's what I recommend — starting at $99 ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/sales-events/amazons-memorial-apple-deals-are-here-from-airpods-to-macbooks-heres-what-i-recommend-starting-at-usd99</link>
                                                                            <description>
                            <![CDATA[ Get ready with summer with Amazon's biggest deals on Apple MacBooks, AirPods, iPads and Watches. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">W2iGD8uHpqtJHUbmjV8dBQ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DYk5j74rnPnkJd55Vsok7B-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 21 May 2026 20:46:37 +0000</pubDate>                                                                                                                                <updated>Sat, 23 May 2026 10:35:48 +0000</updated>
                                                                                                                                            <category><![CDATA[Sales Events]]></category>
                                                                                                <author><![CDATA[ Paul.antill@futurenet.com (Paul Antill) ]]></author>                    <dc:creator><![CDATA[ Paul Antill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7MyNkF6oJfDnS9kZG658oC.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Paul Antill is a Video Producer and Content Creator at Tom&#039;s Guide, specializing in video/audio recording, smart home technology, and laptops. His passion lies in making tech coverage not just informative but also fun and accessible to everyone answering the question “Why does this new product or feature matter to me?” Paul has been a tech host and video producer since 2019 where he has also covered major tech and gaming events. His love for tech and video began on his&amp;nbsp;&lt;a href=&quot;https://www.youtube.com/@paulAntill&quot;&gt;&lt;strong&gt;YouTube channel&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; &lt;/strong&gt;where for the low price of one subscription he shares head-to-head comparisons and clever ways to make the most of your gear. You can also see the behind-the-scenes and the magic that goes into our Tom’s Guide videos over on his&amp;nbsp;&lt;a href=&quot;https://www.instagram.com/thepaulantill/&quot;&gt;&lt;strong&gt;Instagram&lt;/strong&gt;&lt;/a&gt;. Paul graduated from the Mason School of Business at William &amp;amp; Mary, Williamsburg, VA, with a degree in Marketing and Business Analytics. When he&#039;s not on camera, you’ll probably still spot him behind one doing street photography and videography. Back home he’s probably in a heated Overwatch 2 match with his friends.&amp;nbsp;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/DYk5j74rnPnkJd55Vsok7B-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Best Apple Memorial Day deals on Amazon 2026]]></media:description>                                                            <media:text><![CDATA[Best Apple Memorial Day deals on Amazon 2026]]></media:text>
                                <media:title type="plain"><![CDATA[Best Apple Memorial Day deals on Amazon 2026]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DYk5j74rnPnkJd55Vsok7B-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>From AirPods to MacBooks, several Apple gadgets are getting their biggest discounts this month over the Memorial Day weekend. The budget-friendly <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a> goes on sale for the first time, while the <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a> drops to one of its lowest prices of the year. So if you’ve been waiting to save a bit of cash, I’ve found the 12 best Apple deals you can get right now. For more deals, make sure to check out our full guide to the <a href="https://www.tomsguide.com/sales-events/memorial-day-sales-2026">best Memorial Day sales</a>.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="high" data-lazy-src="https://www.youtube-nocookie.com/embed/x3cOIQTRk00" allowfullscreen></iframe></div></div>        <div class="featured_product_block featured_block_hero" data-id="9f3bc2fd-47f7-45fd-846c-b27ffa694070">            <a href="https://www.amazon.com/Apple-2026-MacBook-13-inch-Laptop/dp/B0GR6FHGXX/" data-model-name="13" Apple MacBook Neo" 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/8YchE3imWhfN4TbwCY2ipY.jpg" alt="Apple 2026 Macbook Neo 13-Inch Laptop With A18 Pro Chip: Built for Ai and Apple Intelligence, Liquid Retina Display, 8gb Unified Memory, 256gb Ssd Storage, 1080p Facetime Hd Camera; Indigo"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">13" Apple MacBook Neo</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="9c19b975-0c9b-4e64-9849-4621be4d3d22">            <a href="https://www.amazon.com/dp/B0GR1493ZV" data-model-name="13" Apple MacBook Air (M5)" 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/jGHF7Rz2im2nCoFYkVaduc.jpg" alt="Apple 2026 Macbook Air 13-Inch Laptop With M5 Chip: Built for Ai, 13.6-Inch Liquid Retina Display, 16gb Unified Memory, 512gb Ssd, 12mp Center Stage Camera, Touch Id, Wi-Fi 7; Midnight"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">13" Apple MacBook Air (M5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="f00a2440-f147-4934-ac4f-115f246b766c">            <a href="https://www.amazon.com/dp/B0GR114BV7" data-model-name="15" Apple MacBook Air (M5)" 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/9MvetqdeHJmu7KJRmSUkL.jpg" alt="Apple 2026 Macbook Air 15-Inch Laptop With M5 Chip: Built for Ai, 15.3-Inch Liquid Retina Display, 16gb Unified Memory, 512gb Ssd, 12mp Center Stage Camera, Touch Id, Wi-Fi 7; Midnight"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">15" Apple MacBook Air (M5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a24bd357-0658-4d87-b41c-2131e6c18e81">            <a href="https://www.amazon.com/dp/B0DGHMNQ5Z" data-model-name="Apple Airpods 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:100.00%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/GGVTY6kPFyLGaobk7M33g4.jpg" alt="Apple Airpods 4 Wireless Earbuds, Bluetooth Headphones, Personalized Spatial Audio, Sweat and Water Resistant, Usb-C Charging Case, H2 Chip, Up to 30 Hours of Battery Life, Effortless Setup for Iphone"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airpods 4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="6eca1a42-bdd1-4c7a-be10-6e37b45cea01">            <a href="https://www.amazon.com/dp/B0FQFB8FMG" data-model-name="Apple Airpods Pro 3" 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/pqBqjBmec7ge72PStBCDX8.jpg" alt="Apple Airpods Pro 3 Wireless Earbuds, Active Noise Cancellation, Live Translation, Heart Rate Sensing, Hearing Aid Feature, Bluetooth Headphones, Spatial Audio, High-Fidelity Sound, Usb-C Charging"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airpods Pro 3</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="342069ff-69b8-4e0c-b318-9b95e4431dc9">            <a href="https://www.amazon.com/Apple-AirPods-generation-MagSafe-Charging/dp/B0CP4CG1ZB" data-model-name="Apple AirPods Pro (2nd Generation) renewed" 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/VJqJ8KfhgsX4ELQEMWA5cA.jpg" alt="Apple Airpods Pro (2nd Generation) With Magsafe Charging Case (usb-C) (renewed)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple AirPods Pro (2nd Generation) renewed</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="eb1e4d2c-4204-4c3f-be95-7e25ab14791e">            <a href="https://www.amazon.com/dp/B0GSS72GZJ" data-model-name="Apple AirPods Max 2" 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/K8wopvuKtWqYgKisCYLfbE.jpg" alt="Apple Airpods Max 2 Wireless Over-Ear Headphones, Active Noise Cancellation, Adaptive Audio, Personalized Spatial Audio, Live Translation, Bluetooth Headphones for Iphone – Midnight"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple AirPods Max 2</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="95760084-797b-4afe-a1bc-374e7a24f3cf">            <a href="https://www.amazon.com/dp/B0DZ75TN5F" data-model-name="11" Apple iPad (A16)" 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/ktmQBJRPjyydgcVXFAFkzJ.jpg" alt="Apple Ipad 11-Inch: A16 Chip, 11-Inch Model, Liquid Retina Display, 128gb, Wi-Fi 6, 12mp Front/12mp Back Camera, Touch Id, All-Day Battery Life — Blue"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">11" Apple iPad (A16)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="253cb2b5-aec5-474a-89cd-6e439160766a">            <a href="https://www.amazon.com/dp/B0GQV9W97Q" data-model-name="11" iPad Air (M4)" 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/uh6dQ5hbTK4UZS9cYF7spP.jpg" alt="Apple Ipad Air 11-Inch (m4): Liquid Retina Display, 128gb, 12mp Front/back Camera, Wi-Fi 7 With Apple N1, Touch Id, All-Day Battery Life — Purple"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">11" iPad Air (M4)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="81e1cd8a-dc95-4cb6-87ce-7e599e75e1ef">            <a href="https://www.amazon.com/dp/B0FWCXJVHN" data-model-name="11" iPad Pro (M5)" 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/zUmqz43jVhoKTvkdj8dNzU.jpg" alt="Apple Ipad Pro 11-Inch (m5): Ultra Retina Xdr Display, 256gb, Landscape 12mp Front Camera/12mp Back Camera, Lidar Scanner, Wi-Fi 7 With Apple N1, Face Id, All-Day Battery Life — Space Black"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">11" iPad Pro (M5)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="263d4f51-5f33-4a1c-b392-4952bb18b796">            <a href="https://www.amazon.com/dp/B0FQF9ZX7P" data-model-name="Apple Watch Series 11 (GPS/42mm)" 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/WMRN8u6LHnL2pkECxfCcXX.jpg" alt="Apple Watch Series 11 [gps 42mm] Smartwatch With Rose Gold Aluminum Case With Light Blush Sport Band - S/m. Sleep Score, Fitness Tracker, Health Monitoring, Always-On Display, Water Resistant"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch Series 11 (GPS/42mm)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="36419692-3b5b-4bde-9642-0e7c10064808">            <a href="https://www.amazon.com/dp/B0FQFW7M9H" data-model-name="Apple Watch SE 3 (GPS/40mm)" 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/mbdjK55iASdtsF73yc9kbg.jpg" alt="Apple Watch Se 3 [gps 40mm] Smartwatch With Midnight Aluminum Case With Midnight Sport Band - S/m. Fitness and Sleep Trackers, Heart Rate Monitor, Always-On Display, Water Resistant"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch SE 3 (GPS/40mm)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple Card promotion could offer free AirPods Pro 3 as soon as next week: here's how it works ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/apple-card-promotion-could-offer-free-airpods-pro-3-as-soon-as-next-week-heres-how-it-works</link>
                                                                            <description>
                            <![CDATA[ A new report claims Apple is planning a major AirPods Pro 3 promo to drive sign-ups for the Apple Card. Here's how it works. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">xbgwFSPVyi7nrUVgcQcpTW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 15 May 2026 18:52:24 +0000</pubDate>                                                                                                                                <updated>Fri, 15 May 2026 18:58:50 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple reportedly wants customers to sign up for its Apple Card and could sweeten the deal with a new promotion offering new users a free pair of <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a>. This deal could start as soon as next week. </p><p>According to an X post by <a href="https://x.com/markgurman/status/2055310480357638551" target="_blank">Bloomberg's Mark Gurman</a>, the promotional offer will only be available in Apple's retail stores in the United States.</p><p>"Apple is planning a pretty big Apple Card sign-up incentive for as early as next week in retail stores," Gurman wrote.</p><p>It's a pretty crazy deal, especially since the AirPro Pro 3 is one of the <a href="https://www.tomsguide.com/audio/earbuds/best-noise-canceling-earbuds">best noise-canceling earbuds</a> you can buy.</p><p>To be clear, Apple has not officially announced this promotion, so the exact terms and conditions are not currently available. But here's how it might work, according to Gurman.</p><h2 id="how-the-promotion-works">How the promotion works</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5705px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hfk4whZfbRUQkweEGA87QS" name="AirPods Pro 3" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Hfk4whZfbRUQkweEGA87QS.jpg" mos="" align="middle" fullscreen="" width="5705" height="3209" 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>Per Gurman, if you sign up for the Apple Card, you also need to buy AirPods Pro 3, but then Apple would give you $249 cash back. Effectively, this makes the AirPods free.</p><p>Currently, the AirPods Pro 3 are priced at $249. Gurman does not say whether the cashback would cover any taxes or fees tacked onto the price of Apple's earbuds. Considering he said the offer is for $249 cash back, we're guessing tax will be covered by you, the buyer. Still, </p><p>Apple Card cash back is called "Daily Cash," so the $249 should come back to you the day after you sign up for the card, if it works like traditional cash back on a popular credit card.</p><h2 id="what-is-the-apple-card">What is the Apple Card?</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:55.00%;"><img id="FfkNHTvd2AkQEfaBq8bSpf" name="apple-card-lead.jpeg" alt="apple card" src="https://cdn.mos.cms.futurecdn.net/FfkNHTvd2AkQEfaBq8bSpf.jpeg" mos="" align="middle" fullscreen="" width="1500" height="825" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>As a reminder, Apple launched its credit card in 2019, which remains available only in the U.S.</p><p>You can manage the card in your iPhone Wallet app, where you can see color-coded spending summaries. It has no annual fee and offers 2-3% cash back on purchases made via Apple Pay. You get 1% back on purchases with the physical card.</p><p>Since 2023, Apple has offered a<a href="https://www.tomsguide.com/news/apple-just-launched-apple-card-savings-accounts-what-you-need-to-know"> high-yield savings account</a> to Apple Card holders. That offers an annual percentage yield of 4.15%. </p><p>Currently, the card is backed by Goldman Sachs, but Apple announced this year that it is t<a href="https://www.apple.com/newsroom/2026/01/chase-to-become-new-issuer-of-apple-card/" target="_blank">ransitioning to Chase Bank</a> by 2028.</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/ming-chi-kuo-apple-giving-intel-a-once-in-a-generation-window-to-manufacture-iphone-ipad-and-mac-chips">Ming-Chi Kuo: Apple giving Intel a ‘once-in-a-generation window’ to manufacture iPhone, iPad and Mac chips</a></li><li><a href="https://www.tomsguide.com/ai/apple-may-be-building-an-ai-app-store-and-it-could-change-the-iphone-forever">Apple may be building an AI App Store — and it could change the iPhone forever</a></li><li><a href="https://www.tomsguide.com/ai/i-almost-gave-up-on-apple-tv-s-no-1-show-then-chatgpt-convinced-me-to-keep-watching">I almost gave up on Apple TV’s No. 1 show — then ChatGPT convinced me to keep watching</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ AirPods Ultra with cameras are 'nearly ready' — here's 4 features you need to know ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/airpods-ultra-with-cameras-are-nearly-ready-heres-4-features-you-need-to-know</link>
                                                                            <description>
                            <![CDATA[ Apple's camera-equipped AirPods Ultra could be arriving sooner than we think, and they have some rather interesting features  baked in. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">tT9mATD3VJnMDsscoqZwbh</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/ASdWQTCTF9zU3GEPCHyB5b-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 08 May 2026 12:32:57 +0000</pubDate>                                                                                                                                <updated>Fri, 08 May 2026 17:17:58 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/ASdWQTCTF9zU3GEPCHyB5b-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/ASdWQTCTF9zU3GEPCHyB5b-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The long-rumored<a href="https://www.tomsguide.com/audio/earbuds/airpods-ultra-are-in-the-works-everything-we-know-so-far"> AirPods Ultra</a> may already be in the later stages of development, meaning their release might be sooner than we initially thought. According to sources speaking to <a href="https://www.bloomberg.com/news/articles/2026-05-07/apple-s-camera-equipped-airpods-reach-advanced-testing-stage-in-ai-device-push" target="_blank">Bloomberg</a>, development has now entered a phase featuring prototypes with "near-final design and capabilities."</p><p>Sources say that testers within Apple are actively using prototypes of the new AirPods, as part of what's known as design validation testing (DVT). This is the final stage of the development phase, and once complete Apple will start a production validation test (PVT). That's when the sample units of the final design are built, ahead of full-scale mass production.</p><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/XlJZsodWKE8" allowfullscreen></iframe></div></div><h2 id="what-we-know-about-airpods-ultra">What we know about AirPods 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:1844px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="mHrXZUxPtzzkFNX8FXhYZQ" name="IMG_6812" alt="Woman in a cap wearing the Apple AirPods Pro 3 outside in the sunshine" src="https://cdn.mos.cms.futurecdn.net/mHrXZUxPtzzkFNX8FXhYZQ.jpg" mos="" align="middle" fullscreen="" width="1844" height="1037" 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 AirPods Ultra will reportedly have a design that's siimilar to the <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> but with a number of important enhancements. For one, <a href="https://www.tomsguide.com/audio/airpods/forget-airpods-pro-airpods-ultra-are-rumored-to-get-these-2-big-upgrades">these AirPods are supposed to be built around Siri and AI</a>, offering the kind of AI-enhanced hardware we've started seeing from the likes of Meta and others.</p><p>The AirPods Ultra aren't designed for taking photos or shooting video; they're designed to help Siri see the world and are only capable of capturing "visual information in low resolution." Potential AirPods Ultra features include:</p><ul><li><strong>A version of Visual Intelligence:</strong> that lets you ask Siri questions based on your surroundings. The example cited includes looking at the contents of your fridge and suggesting dinner options based on the ingredients within.</li><li><strong>Visual reminders:</strong> The AirPods Ultra can remind you about tasks or activities based on what it sees around you, such as picking something up at the store when you see it on the shelf.</li><li><strong>Enhanced turn-by-turn directions: </strong>The AirPods Ultra use external landmarks to help you navigate through unfamiliar areas with voice prompts ties to what the earbuds see.</li><li><strong>Built -in LED: </strong>Bloomberg's report mentions a small LED light that indicates whenever the AirPods Ultra are recording and communicating with the cloud. This would be a privacy feature.</li></ul><p>Sadly, while early rumors suggested these<a href="https://www.tomsguide.com/audio/airpods/apple-airpods-with-cameras-tipped-for-2026-heres-what-they-could-do"> cameras would offer gesture controls</a>, this claim has been shot down multiple times.<a href="https://www.tomsguide.com/audio/airpods/apple-tipped-to-release-higher-end-airpods-pro-this-year-advanced-gesture-controls-inbound"> According to Mark Gurman</a>, the technology to fit gesture controls into a pair of AirPods doesn't exist yet</p><h2 id="it-s-all-up-to-siri">It's all up to Siri</h2><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="27G2pLXimP6vAog4vMjnza" name="Airpods_pro 10.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza.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 big question is when will the AirPods Ultra will actually launch? According to Bloomberg, Apple had hoped to put the AirPods on sale during the first half of this year, but the launch was postponed due to the high-profile delays to Siri's AI-overhaul. </p><p>Reports tell us similar delays have affected <a href="https://www.tomsguide.com/home/smart-home/apples-homepad-smart-display-could-offer-an-ingenious-sounding-magnetic-wall-mount">Apple's HomePad smart display,</a> which was built on the assumption that Siri would be ready in time. Sadly, the emphasis on AI was so encompassing that releasing the display without Siri 2.0 wasn't worth it. No doubt the <a href="https://www.tomsguide.com/computing/apples-ai-wearable-roadmap-is-getting-wild-prepare-for-ai-pendant-smart-glasses-and-airpods-with-cameras">rumored AI glasses and camera pendant</a> are similarly affected by this.</p><p><a href="https://www.tomsguide.com/ai/siri-2-0-is-reportedly-delayed-again-heres-when-apples-ai-assistant-might-actually-launch">Siri is expected to debut in September</a>, powered by Google Gemini, alongside <a href="https://www.tomsguide.com/phones/iphones/ios-27-7-biggest-expected-upgrades-for-your-iphone">iOS 27 </a>and <a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-rumors-everything-we-know-so-far">iPhone 18 Pro</a>. But so far, that hasn't been confirmed by Apple,  and likely won't be until <a href="https://www.tomsguide.com/phones/iphones/wwdc-2026">WWDC 2026</a> at the earliest. Still, even if the Siri upgrade does arrive by the end of the year, there's no telling Apple will start rushing out AI-centric devices to capitalize on that. Given the issues it's had upgrading Siri, Apple may want to give the AI the time it needs to adjust to widespread daily use by the general public.</p><p>But, assuming the development process is as far along as this report claims, we could be seeing the AirPods Ultra arrive pretty soon. It may just be down to what Apple does with Siri.</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/apple-usd250-million-settlement-how-to-get-your-payment-and-when-theyre-going-out">Apple $250 million settlement: how to get your payment and when they're going out</a></li><li><a href="https://www.tomsguide.com/phones/android-phones/this-camera-feature-is-so-good-the-iphone-18-pro-absolutely-need-to-copy-it">This camera feature is so good Apple needs to copy it for the iPhone 18 Pro</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-18-pro-leaked-colors-include-a-stunning-new-dark-cherry-option">iPhone 18 Pro leaked colors include a stunning new 'Dark Cherry' option</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Stop using your AirPods like basic earbuds: 3 features you're probably overlooking ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/stop-using-your-airpods-like-basic-earbuds-3-features-youre-probably-overlooking</link>
                                                                            <description>
                            <![CDATA[ Your AirPods can do much more than play music, here are 3 settings you’re missing. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WCeTLt4FBybefYAiW4bVN7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 01 May 2026 13:30:43 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/sUwQW8yCGXFHeksAFjqSxZ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Most people use Apple AirPods for two things: music and calls. That's it. They go in, they come out, the case gets charged. But Apple has quietly packed in a set of features that most owners never find — because they're not signposted anywhere obvious. </p><p>Enable the right settings and your <a href="https://www.tomsguide.com/reviews/airpods-pro-2-review">AirPods Pro 2</a> and <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> can work as a hearing assistance device, picking up and amplifying sounds around you in real time. They can let you answer calls with a nod or decline them with a shake of your head. They can turn a solo listening session into a shared one, with two people tuned into the same audio from a single iPhone.</p><p>Here's how to turn them on. </p><section class="howto-block">                    <h3>1. Amplify conversation in noisy places</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/HWrqwGS4X7MUWnJjSViKhh.jpg"                                        alt="AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/HWrqwGS4X7MUWnJjSViKhh.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Loud restaurants are great until you spend the whole meal leaning across the table asking people to repeat themselves. </p><p>Live Listen fixes that. Set your iPhone down near whoever you're talking to and it transmits their voice directly to your AirPods, cutting through the noise around you like they're speaking straight into your ear.</p><p>To enable it: <strong>swipe down to Control Center, tap the Hearing icon, select Live Listen.</strong></p><p>It works up to 50 feet away, so you can leave your phone near a speaker or a conversation and move around freely.</p></p>                </section><section class="howto-block">                    <h3>2. Share audio </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/qTWTqkcso8N3vy8W3VCoCV.jpg"                                        alt="AirPods 4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/qTWTqkcso8N3vy8W3VCoCV.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Long flights, train journeys, lazy Sunday mornings, sometimes you just want to watch something together without hudding over a single screen sharing one pair of earbuds. </p><p>Share Audio lets two people listen to the same iPhone simultaneously, each on their own AirPods or Beats, each controlling their own volume.</p><p>To set it up: <strong>connect your AirPods and start playing audio. Open Control Center, tap the AirPlay icon, and select Share Audio</strong>. Bring the second pair close to your iPhone, open the case, and a prompt will appear to connect them.</p><p>That's it. Both listeners hear the same audio independently — no splitting earbuds, no one stuck with just the left audio. It works with any combination of AirPods and compatible Beats headphones.</p></p>                </section><section class="howto-block">                    <h3>3. Head gestures </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/ViWtcPkNTZ7pzqdiMea4HD.jpg"                                        alt="AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/ViWtcPkNTZ7pzqdiMea4HD.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>You're elbow-deep in dinner prep, hands covered in raw chicken, and your phone starts ringing. Head Gestures were made for this. Nod to answer and shake to decline, your AirPods detect the movement and handle the rest without you touching a thing.</p><p>To enable this, <strong>go to Settings, tap your AirPods name at the top, select Head Gestures and toggle it on</strong>. Then simply choose which motion answers and which declines.</p><p>It works beyond calls, too — nodding or shaking responds to Siri announcements, message replies, and other notifications, making it genuinely useful any time your hands aren't free.</p><p>Is there a hidden AirPods feature that you love to use? Let us know in the comments below.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eGVpwX"></div>                            </div>                            <script src="https://kwizly.com/embed/eGVpwX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/audio/airpods/how-to-pair-airpods-with-any-android-phone-5-simple-steps">How to pair AirPods with any Android phone — 5 simple steps</a></li><li><a href="https://www.tomsguide.com/audio/your-earbuds-are-disgusting-heres-the-right-way-to-clean-them">Your earbuds are disgusting — here's how to clean them</a></li><li><a href="https://www.tomsguide.com/entertainment/music-streaming/spotifys-lossless-listening-makes-music-sound-brand-new-heres-how-to-enable-it">Spotify's Lossless listening makes music sound brand new</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Forget AirPods Pro — 'AirPods Ultra' are rumored to get these 2 big upgrades ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/forget-airpods-pro-airpods-ultra-are-rumored-to-get-these-2-big-upgrades</link>
                                                                            <description>
                            <![CDATA[ A new rumor suggests Apple is still working on a set of AirPods with a camera that helps run Siri. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">CHmbdzmDgWGp7jV4ZFt2e5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/sAQ2FiuYr2vGX7LGa4Jgcc-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 30 Apr 2026 19:16:24 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/sAQ2FiuYr2vGX7LGa4Jgcc-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/sAQ2FiuYr2vGX7LGa4Jgcc-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As reports of the <a href="https://www.tomsguide.com/computing/vr-ar/apple-has-reportedly-stopped-work-on-the-vision-pro-heres-what-we-know">demise of the Apple Vision Pro</a> began circulating in the last two days, conflicting stories have popped up over what the leftovers will contribute to other Apple devices. </p><p>In a social media post, <a href="https://x.com/markgurman/status/2049661212577931748" target="_blank">Mark Gurman pushed back</a> on rumored gesture controls on Apple Glasses and reiterated that Apple is developing new AirPods that will feature cameras meant "for Siri." It harkens back to <a href="https://www.tomsguide.com/audio/earbuds/airpods-ultra-are-in-the-works-everything-we-know-so-far">reports from March</a> when Gurman said Apple has a set of "AirPods Ultra" in the works. </p><p>Rumors about a version of AirPods featuring infrared cameras first popped up in July 2024 from supply chain<a href="https://www.tomsguide.com/audio/airpods/apple-airpods-with-cameras-tipped-for-2026-heres-what-they-could-do"> analyst Ming-Chi Kuo</a>. At the time, Kuo said the cameras would detect environmental changes and possibly enable "in-air gesture control to enhance human-device interaction."</p><p>Gurman, on the other hand, doesn't believe the technology for camera-based gesture controls exists. "The technology to do this reliably with a single camera, no neural band and no eye-scanning doesn’t exist today as far as I know," he said in a<a href="https://x.com/markgurman/status/2049656010751766770" target="_blank"> different post</a>. </p><p>He's previously reported that the cameras would work by "feed[ing] visual intelligence data to Siri." In essence, this would be similar to how the camera is used in the Face ID system on iPhones.</p><h2 id="another-link-in-the-ultra-chain">Another link in the Ultra chain</h2><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="aUJZxCfMMXC3m2nKLVB2dV" name="iPhone Fold final design 1" alt="iPhone Fold design" src="https://cdn.mos.cms.futurecdn.net/aUJZxCfMMXC3m2nKLVB2dV.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: Majin Bu on X)</span></figcaption></figure><p>In recent weeks, several rumors have suggested Apple is pursuing <a href="https://www.tomsguide.com/phones/iphones/iphone-ultra-could-be-the-start-of-a-whole-new-era-at-apple-where-pro-isnt-the-best-anymore">"Ultra" branding</a> across several of its most popular devices. Currently, Apple sells one Ultra-branded device, its <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-ultra-3-review">Apple Watch Ultra 3</a>.</p><p>Later this year, alongside the AirPods Ultra, we could also get the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-heres-what-the-leaks-and-rumors-say-about-apples-alleged-upcoming-foldable-phone">foldable iPhone</a>, rumored to be labeled the <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-may-not-arrive-with-that-name-after-all-make-way-for-iphone-ultra">iPhone Ultra</a>, and the long-rumored <a href="https://www.tomsguide.com/computing/macbooks/apples-first-oled-touchscreen-macbook-pro-may-launch-in-2026-heres-what-we-know">touchscreen MacBook Ultra</a>.</p><p>All of these Ultra models would supersede the Pro moniker that currently denotes Apple's highest-end devices. Though we have been hearing rumors about an <a href="https://www.tomsguide.com/news/iphone-15-ultra">alleged iPhone Ultra</a> for years now, usually centered on rebranding the Pro Max.</p><p>Regarding all three devices, we likely won't see them debut until September at the earliest, when Apple holds its annual iPhone event. The AirPods would probably be announced then as well. </p><p>The MacBook Ultra will most likely launch in the usual October window when Apple typically debuts its MacBook Pros. If not in October, then possibly in early 2027, as Apple did with the <a href="https://www.tomsguide.com/computing/macbooks/macbook-pro-m5-pro-and-m5-max-announced-price-release-date-specs-and-more">M5 Pro and Ultra versions </a>this year.</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/vr-ar/apple-has-reportedly-stopped-work-on-the-vision-pro-heres-what-we-know">Apple has reportedly 'stopped work on the Vision Pro' — here's what we know</a></li><li><a href="https://www.tomsguide.com/phones/iphones/iphone-fold-will-reportedly-have-four-selling-points-heres-how-it-will-stand-out">iPhone Fold will reportedly have 'four selling points' — here's how it will stand out</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-wore-an-apple-watch-and-a-garmin-for-the-london-marathon-heres-which-came-out-on-top">I wore an Apple Watch and a Garmin for the London Marathon: Here’s which came out on top</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Your earbuds are damaging your hearing — 3 warning signs you're ignoring ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/your-earbuds-are-damaging-your-hearing-3-warning-signs-youre-ignoring</link>
                                                                            <description>
                            <![CDATA[ Learn the warning signs of earbud-related hearing damage, and how to protect your hearing going forward. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">Ly5xik5JXW4TBaeF3bnahj</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UMXRo3jZ6wo7vr4PP9HA8Z-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 07 Apr 2026 06:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Audio]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/sUwQW8yCGXFHeksAFjqSxZ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UMXRo3jZ6wo7vr4PP9HA8Z-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods 4]]></media:description>                                                            <media:text><![CDATA[AirPods 4]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods 4]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UMXRo3jZ6wo7vr4PP9HA8Z-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>You wear earbuds on your commute, during work calls, at the gym, while cooking dinner. They're as essential as your phone, blocking out the world and keeping you connected. But this constant use comes with a cost most people don't recognize until it's too late.</p><p>Hearing damage from earbuds doesn't announce itself dramatically. It creeps in through subtle warning signs your body sends long before you realize something's wrong. By the time you notice you're struggling to hear conversations in noisy environments or asking people to repeat themselves, permanent damage has already occurred.</p><p>James Grifo, owner and CEO of<a href="https://audiovisualnation.com/"> Audio Visual Nation</a>, a provider of professional audio solutions, explains the three most common warning signs that your earbuds are harming your ears and what you can do to protect your hearing right now.</p><h2 id="why-earbuds-cause-hearing-damage">Why earbuds cause hearing damage</h2><p>It's not just volume that damages hearing. Prolonged sound exposure, even at moderate levels, puts ongoing pressure on the delicate structures of your inner ear. When you add high volume, the damage accelerates.</p><p>Poorly fitted earbuds make this worse. When they don't sit properly in your ear canal, most people compensate by turning up the volume to block out background noise. This creates a cycle where your ears work harder than they should.</p><p>"Think of it like holding a weight," Grifo explains. "Holding five pounds for a minute is easy. Holding it for eight hours straight causes serious strain. That's what's happening inside your ears when you wear earbuds all day."</p><p>Noise-canceling earbuds add another problem. While they're effective at blocking external sound, they make it comfortable to listen for extended periods. What feels like a quiet, peaceful listening experience is actually prolonged exposure your ears weren't designed to handle.</p><h3 class="article-body__section" id="section-3-signs-your-earbuds-are-damaging-your-hearing"><span>3 signs your earbuds are damaging your hearing</span></h3><section class="howto-block">                    <h3>1. Persistent ringing after using earbuds, even briefly</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/edYhDZty8vUN3qgCEGGkph.jpg"                                        alt="AirPods 4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/edYhDZty8vUN3qgCEGGkph.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>If you notice a ringing, buzzing, or hissing sound in your ears after taking out your earbuds, that's tinnitus. <strong>This isn't normal</strong>, even if it goes away after a few minutes.</p><p>"Tinnitus is your ear's alarm system," says Grifo. "It's telling you that the tiny hair cells in your inner ear are stressed or damaged. If you're hearing ringing after just 20 or 30 minutes of listening, that's a red flag."</p><p>Many people dismiss temporary tinnitus as harmless since it fades. But repeated episodes indicate cumulative damage that can become permanent over time. The hair cells in your inner ear don't regenerate. Once they're damaged, they stay damaged.</p><p><strong>If you experience ringing after brief earbud use, your listening volume is too high or your sessions are too long</strong>. Both need to change immediately to prevent permanent tinnitus that never goes away.</p></p>                </section><section class="howto-block">                    <h3>2. Needing to increase volume</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/Lpwc8sK3KCjufnrjtrunE4.jpg"                                        alt="AirPods 4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/Lpwc8sK3KCjufnrjtrunE4.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Have you found yourself gradually turning up the volume to hear your music or podcasts as clearly as you used to? This is one of the earliest signs of hearing loss.</p><p><strong>When the sensitive cells in your inner ear become damaged, they can't pick up sounds as effectively</strong>. Your brain tries to compensate by making you turn up the volume, which then causes more damage in a vicious cycle.</p><p>"If you're constantly adjusting your volume higher to get the same experience, your hearing has already changed," Grifo warns. "Most people don't connect these dots until the loss is significant."</p><p>This happens gradually enough that you don't notice day-to-day changes. But if you compare your current volume settings to what you used six months or a year ago, the increase reveals hearing degradation that's already underway.</p></p>                </section><section class="howto-block">                    <h3>3. Muffled or dull hearing after taking earbuds out</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/g74gwmEcEEMAqC9Xpi2Aqm.jpg"                                        alt="AirPods 4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/g74gwmEcEEMAqC9Xpi2Aqm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Your hearing should return to normal immediately after removing your earbuds. <strong>If sounds seem muffled, dull, or distant afterward, your ears are overstressed</strong>.</p><p>This temporary threshold shift happens when your ears have been exposed to sound for too long or at too high a volume. While your hearing might recover after a few hours or overnight, each episode causes wear and tear that adds up over time.</p><p>"This is especially common with noise-canceling earbuds," says Grifo. "Because they're so comfortable and block everything out, people wear them for three, four, five hours straight without realizing the cumulative effect on their ears."</p></p>                </section><section class="howto-block">                    <h3>How to protect your hearing</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/UKdVmYCPacMGPK6AgyEFmE.jpg"                                        alt="AirPods 4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/UKdVmYCPacMGPK6AgyEFmE.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>The good news is protecting your hearing doesn't mean giving up earbuds. <strong>Follow the 60/60 rule: listen at no more than 60% volume for no more than 60 minutes at a time</strong>. Give your ears regular breaks throughout the day.</p><p>Invest in properly fitted earbuds that create a good seal in your ear canal. When they fit correctly, you won't need to crank up the volume to block out background noise. This alone prevents much of the damage people inflict by compensating for poor fit with higher volume.</p><p>Use your device's built-in health features. Both iPhones and Android phones now track audio exposure and alert you when you've been listening too loudly for too long. Enable these notifications and pay attention when they warn you.</p><p>"If you're already experiencing any of these warning signs, see an audiologist," Grifo advises. "Hearing damage is permanent, but catching it early means you can prevent further loss."</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eMQr6e"></div>                            </div>                            <script src="https://kwizly.com/embed/eMQr6e.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/audio/airpods/3-genius-airpods-tips-that-boost-sound-quality-and-improve-fit">3 hidden AirPods features that instantly boost sound and comfort</a></li><li><a href="https://www.tomsguide.com/entertainment/music-streaming/spotifys-lossless-listening-makes-music-sound-brand-new-heres-how-to-enable-it">Spotify's Lossless Listening makes music sound amazing — how to enable it</a></li><li><a href="https://www.tomsguide.com/audio/airpods/i-just-discovered-these-5-airpods-features-and-theyre-game-changers">I just discovered these 5 hidden AirPods features — they're game-changers</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple at 50: The 51 best (and worst) moments in Apple's history  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/the-50-moments-that-defined-apple</link>
                                                                            <description>
                            <![CDATA[ To commemorate Apple's 50th anniversary, we've put together a list of the 51 highs — and lows — of the company. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">7pSBiStsM2K3Vvag4GLnZd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UqLXuXcvCCKMcWpJSDHRgJ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 01 Apr 2026 08:00:00 +0000</pubDate>                                                                                                                                <updated>Wed, 01 Apr 2026 18:18:05 +0000</updated>
                                                                                                                                            <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></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>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UqLXuXcvCCKMcWpJSDHRgJ-1280-80.jpg">
                                                            <media:credit><![CDATA[Credit: Tom&#039;s Guide/Getty]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Steve Jobs holding the original iPhone]]></media:description>                                                            <media:text><![CDATA[Steve Jobs holding the original iPhone]]></media:text>
                                <media:title type="plain"><![CDATA[Steve Jobs holding the original iPhone]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UqLXuXcvCCKMcWpJSDHRgJ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I’ve been covering Apple for 25 of its 50 years, and I’ve had a front-row seat for the moments that for many redefined modern life. I was there when Steve Jobs pulled the original MacBook Air from a manila envelope. I reviewed the first iPhone when it was considered a "gamble," and I was among the first to step into the spatial computing era with the Vision Pro.</p><p>Over the last half-century, there have been plenty of "wow" moments, but also the high-profile flops and setbacks you'd expect from a brand that recently became the world's first <strong>$4 trillion empire.</strong></p><p>The Apple of the pre-iPhone era was more tumultuous—and honestly, more interesting. They didn't just build computers; they made personal computing a household reality with the Apple II and refined the mouse for the masses. But they also faced a near-death experience in the '90s during Steve Jobs’ exile, famously sitting just 90 days away from bankruptcy before his 1997 return.</p><p>That "Second Act" sparked a wave of hits—from the iPod and iPhone to the App Store—that changed how we live. But it wasn't all smooth sailing; we lived through controversies like the “you’re holding it wrong” Antennagate, too.</p><figure class="center-layout"><fw-embed-feed channel="toms_guide" playlist="oWl47M" mode="row" player_placement="bottom-right"></fw-embed-feed></figure><p>Since taking the baton, Tim Cook has ushered in a massive Apple “ecosystem era,” scaling the brand to heights once thought impossible with the Apple Watch, AirPods, and the revolutionary shift to Apple Silicon. Today, services like iCloud and Apple Music are the invisible glue holding it all together.</p><p>To celebrate 50 years of "Thinking Different," we’ve curated a definitive list of the <strong>51 biggest moments</strong> in Apple’s history—the iconic triumphs, the public stumbles, and the one "bonus" moment that points to where the next 50 years are headed. <em>— Mark Spoonauer</em></p><h3 class="article-body__section" id="section-the-early-years"><span>The Early Years</span></h3><h2 id="1977-apple-ii-revolutionizes-personal-computing">1977: Apple II revolutionizes personal 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:5020px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="zjxc8CPxoCUHMjGNpjXymZ" name="Apple II - GettyImages-90738849" alt="Apple II computer" src="https://cdn.mos.cms.futurecdn.net/zjxc8CPxoCUHMjGNpjXymZ.jpg" mos="" align="middle" fullscreen="" width="5020" height="2824" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>Where it all started — the big bang of personal computing. Announced in front of a small audience at the West Coast Computer Faire, the Apple II was the first pre-assembled machine to bring color graphics and a built-in keyboard to the masses. With a sleek plastic case and expansion slots, what was once a hobbyist dream had turned into a consumer reality overnight. This is where modern consumer computing truly started. <em>— Jason England</em></p><h2 id="1983-the-lisa-s-9-995-price-tag-buried-a-beautiful-interface">1983: The Lisa's $9,995 price tag buried a beautiful interface 👎</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5736px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="cxdQDSmzjnJQ54C9ugPyRa" name="Apple Lisa - GettyImages-1477262347" alt="Apple Lisa computer" src="https://cdn.mos.cms.futurecdn.net/cxdQDSmzjnJQ54C9ugPyRa.jpg" mos="" align="middle" fullscreen="" width="5736" height="3227" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>The Lisa was a brilliant, $9,995 disaster. Because sure, it pioneered a lot of things we take for granted today like the mouse and a graphical user interface. But its astronomical price (nearly $30,000 in today’s money) and sluggish performance doomed it. Fun fact: thousands of unsold units ended up in a Utah landfill. <em>— Jason England</em></p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eBn7Ke"></div>                            </div>                            <script src="https://kwizly.com/embed/eBn7Ke.js" async></script><h2 id="the-1984-ad">The "1984" ad  👍</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/VtvjbmoDx-I" allowfullscreen></iframe></div></div><p>Apple is perhaps less known for the computer it launched this year than the seminal ad that ran during the Super Bowl. Directed by Ridley Scott, it depicted a female athlete throwing a sledgehammer at an Orwellian Big Brother, shattering his preachings to the hypnotized masses — otherwise known as PC users. It not only positioned Apple from then on as the iconoclastic computing brand, but also shook up the advertising market, too. <em>— Mike Prospero</em></p><h2 id="1985-steve-jobs-is-fired">1985: Steve Jobs is fired 👎</h2><p>Despite the big push around the Mac the year before, declining sales led to internal divisions between Jobs and CEO John Sculley over the direction Apple should take. A power struggle between the two led to Jobs’ resignation, and a dozen years in the wilderness — during which time he founded NeXT and Pixar. <em>— MP</em></p><h3 class="article-body__section" id="section-1990-1999"><span>1990 – 1999</span></h3><h2 id="1993-the-ambitious-but-flawed-newton-messagepad">1993: The ambitious (but flawed) Newton MessagePad 👎</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4410px;"><p class="vanilla-image-block" style="padding-top:58.73%;"><img id="5JzZfc8BkPgUuJN54UX5qW" name="Newton MessagePad - GettyImages-90766340" alt="Newton MessagePad" src="https://cdn.mos.cms.futurecdn.net/5JzZfc8BkPgUuJN54UX5qW.jpg" mos="" align="middle" fullscreen="" width="4410" height="2590" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>Before there was the iPad, there was the Newton MessagePad. John Sculley coined the term PDA to describe this pocketable computer that could take notes, store your contacts, manage a calendar and even send a fax. Handwriting recognition was billed as the device’s killer feature, but it was very inaccurate and widely mocked — including on an episode of The Simpsons. The device’s high price ($700) and poor battery life also hampered it. Once Jobs returned to Apple, he unceremoniously killed the product. — <em>Jeff Parsons</em> </p><h2 id="1993-apple-licenses-3rd-party-mac-clones">1993: Apple licenses 3rd party Mac clones 👎 </h2><p>In an effort to emulate Microsoft’s strategy, Apple started licensing its operating system to third-party computer makers to capture greater market share. However, it was only pursued half-heartedly, and Steve Jobs killed the initiative upon his return in 1997. <em>— MP</em></p><h2 id="1996-the-apple-pippin-flop">1996: The Apple Pippin flop 👎</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5280px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="gRVL4aJx62ZMZYdhW5csHY" name="Apple Pippen - Evan Amos Wikimedia" alt="The Japanese version of the Apple Pippen console" src="https://cdn.mos.cms.futurecdn.net/gRVL4aJx62ZMZYdhW5csHY.jpg" mos="" align="middle" fullscreen="" width="5280" height="2970" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Evan Amos/Wikimedia)</span></figcaption></figure><p>Long before the Apple TV was a "hobby," Apple tried to dominate the living room with this game console. And failed miserably. Ten months before Steve Jobs came back to Apple, the company collaborated with Bandai to make the $600 Pippin game machine. Poor graphics, a weird controller (with trackball!) and utter lack of games all conspired against this machine. Apple wound up selling only 42,000 units total, compared to over 300,000 for the Nintendo 64 — in its first three days.<strong> </strong><em>— Mark Spoonauer</em></p><h2 id="1996-steve-jobs-returns-to-apple-and-gets-a-lifeline-from-bill-gates">1996: Steve Jobs returns to Apple and gets a lifeline from … Bill Gates 👍</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:867px;"><p class="vanilla-image-block" style="padding-top:64.01%;"><img id="rBKnWbYKZhnYLrY5aNziUW" name="Bill Gates - GettyImages-1896430137" alt="Microsoft Chairman Bill Gates addresses the Macworld Expo in Boston via phone link after Steve Jobs (small on stage) announced 06 August he will join the board of directors of Apple. Jobs also announced that Microsoft is investing 150,000,000 USD to purchase non-voting stock of Apple forging a new alliance between the two rival companies.     AFP PHOTO  John MOTTERN (Photo by JOHN MOTTERN / AFP via Getty Images)" src="https://cdn.mos.cms.futurecdn.net/rBKnWbYKZhnYLrY5aNziUW.jpg" mos="" align="middle" fullscreen="" width="867" height="555" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>Apple in 1997 was reportedly just 90 days away from possible bankruptcy, and Steve Jobs needed to buy some time after just returning to the company. That lifeline came in the form of a $150 million investment from Microsoft in non-voting Apple stock. Announced at Macworld Expo, the news was met with boos, but the agreement helped Apple in multiple ways, including a patent truce between the two companies and a commitment from Microsoft to develop Office for Mac. <em>— Mark Spoonauer </em></p><h2 id="1998-the-colorful-imac-g3-saves-apple-from-bankruptcy">1998: The colorful iMac G3 saves Apple from bankruptcy 👍 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2286px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="n6PHSYRdMAHLwEy6phASmX" name="iMac G3 - GettyImages-51096325" alt="The colorful iMac G3" src="https://cdn.mos.cms.futurecdn.net/n6PHSYRdMAHLwEy6phASmX.jpg" mos="" align="middle" fullscreen="" width="2286" height="1286" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>The fight was on to bring Apple back from the brink, and the company’s answer was a Bondi Blue revolution in the iMac G3. Up until this point, we’d gotten used to boring beige boxes sitting atop desks, but Jony Ive’s translucent all-in-one turned computing into fashion. At the same time, it killed the floppy drive, bet everything on USB and made getting on the internet a three-step process — all three future bets worked out for sure! <em>— Jason England</em></p><h2 id="1998-the-terrible-hockey-puck-mouse">1998: The terrible "Hockey Puck" mouse 👎 </h2><p>Apple matched the aesthetics of its iMac G3 range with a circular USB Mouse dubbed “Hockey Puck” with a singular button at the top. It was small, with a short cord and forced users to crab their hands around it. Many users also complained of losing the orientation of the mouse when they took their hands off it to type something. The hockey puck mouse only lasted two years, from 1998 to 2000, before it was discontinued. — <em>Jeff Parsons</em></p><h2 id="1999-the-ibook-imac-to-go">1999: The iBook – "iMac to go"  👍 </h2><p>I miss this era of Apple design, and you can tell Apple does too with the bright, bold colors of the MacBook Neo. This vivid triumph brought “iMac to go” to the masses with a rugged design and iconic carrying handle. But the huge win here was what laid inside with AirPort — making it the first consumer laptop with Wi-Fi (which Jobs demonstrated by passing it through a hula-hoop). <em>— Jason England</em></p><h3 class="article-body__section" id="section-2000-2009"><span>2000 – 2009</span></h3><h2 id="2001-the-original-ipod-1-000-songs-in-your-pocket">2001: The original iPod — "1,000 songs in your pocket" 👍</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2333px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="vjAtpVeUUxN23Fd86qM37Z" name="iPod 2001 - GettyImages-540030831" alt="The original iPod in 2001" src="https://cdn.mos.cms.futurecdn.net/vjAtpVeUUxN23Fd86qM37Z.jpg" mos="" align="middle" fullscreen="" width="2333" height="1312" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>Before the iPod, we carried Walkmans. Before 2001 other MP3 Players existed at the time, sure, but they offered limited storage and junky user interfaces. The iPod killed both Walkmans and other MP3 players in one fell swoop. Its cutting-edge design was irresistible and its easy-to-use software made transferring music a breeze. It’s no wonder why the iPod and its numerous smaller-sized siblings took over the world for the better part of the aughts. — Nick Pino</p><h2 id="2001-the-first-apple-stores">2001: The first Apple Stores  👍 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2825px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="dByA6Zd44RKwbX5Qq3c5YZ" name="Apple Store 2001 - GettyImages-1610178" alt="An Apple Store in 2001" src="https://cdn.mos.cms.futurecdn.net/dByA6Zd44RKwbX5Qq3c5YZ.jpg" mos="" align="middle" fullscreen="" width="2825" height="1589" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>Forget Best Buy! Emulating the aesthetic of its products, the Apple Store features a clean, minimalistic design with all of Apple’s products nearly laid out, and with scores of Apple “Geniuses” on hand to answer your questions. Within three years, the company was making $1 billion in sales from these stores. Since then, other major tech brands, including Microsoft and Meta, have tried to emulate this model. <em>— MP</em></p><h2 id="2003-itunes-store-saves-the-music-industry-from-napster-era-chaos">2003: iTunes Store saves the music industry from Napster-era chaos 👍 </h2><p>If you’re going to launch the most successful MP3 player, you need to offer some way to easily download music to the device — for a fee, of course. After securing deals with every major record label, the iTunes Store launched in April 2003. Initially, individual songs cost 99 cents; Apple sold more than 1 millions songs within the first week of its launch. By 2008, it had become the largest music service in the U.S., and eleven years after its launch, Apple had sold more than 35 billion songs. While Apple has in recent years shifted its model towards the subscription-based Apple Music, the impact of the original music storefront was seismic. <em>— MP</em></p><h2 id="2005-ipod-nano-really-shrinks-the-ipod">2005: iPod Nano (really) shrinks the iPod  👍</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2201px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="JBJsQLJ9fKb57AW57nKn4Y" name="iPod Nano - GettyImages-539982311" alt="The original iPod Nano shown in 2010" src="https://cdn.mos.cms.futurecdn.net/JBJsQLJ9fKb57AW57nKn4Y.jpg" mos="" align="middle" fullscreen="" width="2201" height="1238" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>After dominating its rivals for several years, Apple pushed the envelope further with the release of the iPod nano in the fall of 2005. While the iPod mini had already reduced the size of Apple’s original portable music player, the iPod nano took portability to the extreme. Steve Jobs famously revealed it at an event by pointing to the small watch pocket of his jeans, from which he pulled the engineering marvel — complete with its 6.9 mm frame. Just like the iPod mini before it, the nano could store the same amount of songs, but at 62% of the size. <em>— John Velasco</em></p><h2 id="2007-the-original-iphone-peak-steve-jobs">2007: The original iPhone: Peak Steve Jobs 👍</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/MnrJzXM7a6o" allowfullscreen></iframe></div></div><p>No gadget in history had as much hype leading up to it as the original iPhone. But Steve Jobs delivered when he unveiled the iPhone at Macworld in January 2007 with his now-iconic 3-in-1 pitch. “It’s a widescreen iPod with touch controls," a "revolutionary mobile phone," and a "breakthrough internet communications device.” </p><p>Jobs also successfully argued that having a fixed keyboard on the bottom third of a smartphone was a waste of space. Even after the iPhone launched there were plenty of skeptics, including Microsoft’s Steve Ballmer ("500 dollars? Fully subsidized?”) and BlackBerry’s Jim Balsillie (“It’s okay, we’ll be fine.”). </p><p>The competition underestimated the magic inside the iPhone, including the first-of-its-kind multitouch display, powerful Safari browser and visual voicemail. The first iPhone didn’t have 3G or App Store, but it redefined the user experience on phones for generations to come. <em>— Mark Spoonauer</em></p><h2 id="2008-the-macbook-air">2008: The MacBook Air 👍</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/EJqP8P0dh2o" allowfullscreen></iframe></div></div><p><strong> </strong>I actually had the chance to attend the launch of the MacBook Air, during which Steve Jobs pulled this iconically sleek laptop out of a manilla envelope. And it wound up transforming the entire mobile computing industry. The $1,799 notebook was the thinnest laptop ever at the time at just 0.16 to 0.76 inches, and the tapered aluminum chassis weighed just 3 pounds.</p><p>What truly set the MacBook Air apart is what Apple decided to leave on the cutting room floor, including an optical drive and multiple ports. You got just a single USB 2.0 port and Micro DVI-connector behind a flip-down door. This Intel Core 2 Duo laptop wasn’t the fastest, and the battery life was below-average, but the sheer innovation on display with the design (including the multi-touch trackpad) would spur an avalanche of Windows copycats. <em>— Mark Spoonauer</em></p><h2 id="2008-the-app-store-creates-a-multi-billion-dollar-economy-overnight">2008: The App Store creates a multi-billion dollar economy overnight 👍 </h2><p>While the iPhone was a sensation, it didn’t really take off until Apple introduced the App Store, which let third-party developers get their apps in front of iPhone owners in one convenient storefront. In its first weekend, more than 10 million apps were downloaded; by 2025, the App Store generated $114 billion in revenue. There have been a number of legal challenges in recent years — including in-app transactions and the percentage that Apple gets — which have only underscored the dominance of this business model. <em>— MP</em></p><h3 class="article-body__section" id="section-2010-2019"><span>2010 – 2019</span></h3><h2 id="2010-iphone-4-a-peak-design-moment">2010: iPhone 4: A peak design moment 👍 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2565px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="HnafXBzSg5dUfaKXQv2ERZ" name="iPhone 4 - GettyImages-101745121" alt="Steve Jobs unveiling the iPhone 4" src="https://cdn.mos.cms.futurecdn.net/HnafXBzSg5dUfaKXQv2ERZ.jpg" mos="" align="middle" fullscreen="" width="2565" height="1443" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>Even though many would argue the original iPhone is the most memorable phone in Apple’s history, I believe that title better fits the iPhone 4. The fourth-generation model wasn’t just a step forward; it was a generational leap that set new benchmarks. For instance, it introduced a premium glass-meets-metal design that ditched the plastic construction of its predecessors. On top of that, it was the first iPhone to feature the Retina Display, FaceTime, a backside-illuminated camera sensor, and Apple’s first custom chip, the A4.<em> — John Velasco</em></p><h2 id="2010-antennagate-the-iphone-4-flaw-that-birthed-the-phrase-you-re-holding-it-wrong">2010: Antennagate — The iPhone 4 flaw that birthed the phrase: "You’re holding it wrong" 👎 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4344px;"><p class="vanilla-image-block" style="padding-top:63.40%;"><img id="8ZCvZVShNTrPSrHZTTZ9dX" name="GettyImages-102935909 (1)" alt="Steve Jobs, chief executive officer of Apple Inc., talks about the Apple iPhone 4 at a news conference in Cupertino, California, U.S., on Friday, July 16, 2010. Apple announced a free "bumper" to owners of the iPhone4 to help with antenna issues. Photographer: Tony Avelar/Bloomberg" src="https://cdn.mos.cms.futurecdn.net/8ZCvZVShNTrPSrHZTTZ9dX.jpg" mos="" align="middle" fullscreen="" width="4344" height="2754" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>There’s hubris, and then there’s HUBRIS. Labeled as the biggest tech fail by many of 2010, “antennagate” refers to how the iPhone 4 suffered from weaker reception when you gripped the lower left corner of the phone. But the bigger controversy was Apple’s reaction. The official statement basically told users that they just needed to <a href="https://www.engadget.com/2010-06-24-apple-responds-over-iphone-4-reception-issues-youre-holding-th.html"><u>stop holding the phone the wrong way</u></a> or to buy a case. <em>— Mark Spoonauer</em></p><h2 id="2010-apple-tv-2nd-gen-the-99-price-point-that-made-streaming-accessible">2010: Apple TV 2nd Gen — The $99 price point that made streaming accessible 👍</h2><p>Once Roku hit the market in 2008, it became clear that the streaming player market was going to be a race to the bottom. At just $99, the Apple TV 2nd Gen was Apple’s take on the more affordable streaming box, and while I can’t say that it disrupted the market in the same way Roku did, it’s the linchpin that kept the company’s “hobby project” alive and well in the face of steep (and cheap) competition. <em>— Nick Pino</em></p><h2 id="2010-ping-the-music-social-network-that-no-one-asked-for">2010: Ping — The "music social network" that no one asked for 👎 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5259px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4ndoRhKXJhRYQMRgwgAuDa" name="Ping - GettyImages-1172366389" alt="iTunes Ping social network for music" src="https://cdn.mos.cms.futurecdn.net/4ndoRhKXJhRYQMRgwgAuDa.jpg" mos="" align="middle" fullscreen="" width="5259" height="2958" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>"It is sort of like Facebook and Twitter meet iTunes," Steve Jobs said at the launch of Apple’s music-based social network. Only it wasn’t. Shortly after it went live, Facebook blocked any linking via API to Ping, which disabled a much-touted feature — and squashed any hopes of jump-starting the network. It was also inundated with spam comments soon after launch. Ping sputtered on for another two years before Apple killed it off, and simply added Facebook and Twitter to iTunes. Mission Accomplished! <em>— MP</em></p><h2 id="2010-the-ipad-launches">2010: The iPad Launches  👍 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3678px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="kanGBnXestgaXL74LbGXmY" name="iPad - GettyImages-96211164" alt="Steve Jobs unveils the original iPad in 2011" src="https://cdn.mos.cms.futurecdn.net/kanGBnXestgaXL74LbGXmY.jpg" mos="" align="middle" fullscreen="" width="3678" height="2069" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>Remember netbooks? These cheap laptops with tiny screens were all the rage back in 2007 and were a big deal for a few years — until the iPad came along. During the iPad launch event in 2010, Steve Jobs mocked the category, saying that “they’re not better at anything.” He wasn’t wrong. Meanwhile, the iPad took tablets mainstream with a 9.7-inch multitouch display, making it a great device for checking email, playing videos, reading e-books and more. Critically, the iPad ran apps developed for the platform, unlike Android tablets that merely ran supersized phone apps. And thanks to the A4 chip you got a very impressive 10 hours of battery life. <em>— Mark Spoonauer</em></p><h2 id="2011-siri-launches-then-stumbles">2011: Siri launches, then stumbles 👎 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3500px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DPrPR7FXnLqtx3kh8CE2fZ" name="Siri iPhone 4s - GettyImages-129202541" alt="Siri on the iPhone 4s" src="https://cdn.mos.cms.futurecdn.net/DPrPR7FXnLqtx3kh8CE2fZ.jpg" mos="" align="middle" fullscreen="" width="3500" height="1969" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>Siri’s original launch came alongside the iPhone 4s in October 2011, and while it initially won a lot of praise for its voice recognition, it wasn’t long before the cracks started to show. Siri could (and still does) function well for basic tasks like scheduling calendar appointments and checking the weather, but Apple’s voice assistant was swiftly overtaken by more capable alternatives from Google and Amazon. Even now, Siri continues to lag behind the current crop of generative AI chatbots like Gemini and ChatGPT. Apple promised an upgraded “Siri 2.0” powered by Apple Intelligence back in 2024, which has yet to materialize… — <em>Jeff Parsons</em> <strong> </strong></p><h2 id="2012-apple-maps-launches-a-thousand-memes">2012: Apple Maps launches a thousand memes 👎</h2><p>The errors within Apple Maps were enough to drive people crazy, or at least in the wrong direction. Apple released its own navigation app to counter Google Maps, but things were so bad — missing and misplaced landmarks, bad spelling, and more — that CEO Tim Cook issued a written apology, and both Scott Forstall (senior vice president of iOS) and Richard Williamson (the head of the Maps team) left the business. While the problems have been fixed, Apple Maps’ disastrous initial rollout is still referenced every time the company updates the app. <em>— MP</em></p><h2 id="2013-mac-pro-trash-can-a-thermal-design-that-neglected-pro-users-for-years">2013: Mac Pro "Trash Can": A thermal design that neglected pro users for years 👎</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2598px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="fSZ5TV78AGSPqtR6wkEmHZ" name="Mac Pro 2012 - GettyImages-185582309" alt="Mac Pro "trashcan" redesign shown at it's launch in 2012" src="https://cdn.mos.cms.futurecdn.net/fSZ5TV78AGSPqtR6wkEmHZ.jpg" mos="" align="middle" fullscreen="" width="2598" height="1461" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p><strong> </strong>“Can’t innovate anymore, my ass!” Phil Schiller exclaimed with confidence when announcing the new generation of Mac Pro, which was then famously dubbed the “trash can.” It sacrificed the one thing pros want — modularity — for a sleek cylindrical silhouette. And don’t get me wrong, it looked cool. But by betting on this super small build while packing it with dual GPUs, Apple painted itself into a thermal corner and learned a big lesson in style over substance. <em>— Jason England</em></p><h2 id="2014-iphone-6-plus-finally-going-big-apple-triggers-largest-upgrade-cycle-in-smartphone-history">2014: iPhone 6 Plus — Finally going big, Apple triggers largest upgrade cycle in smartphone history 👍</h2><p>For the longest time, Apple was reluctant to follow the industry trend of making phones with larger screens. It wasn’t until the iPhone 5 that Apple finally upgraded from the 3.5-inch screens of its previous models to a slightly larger 4-inch version — a strategy that changed substantially with the iPhone 6 release. In addition to a much larger 4.7-inch display in the iPhone 6, Apple introduced an even larger 5.5-inch display with the iPhone 6 Plus. This change convinced many Android users to make the switch, triggering the biggest upgrade cycle in the company's history. <em>— John Velasco</em></p><h2 id="2014-iphone-6-bendgate">2014: iPhone 6 Bendgate 👎 </h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/znK652H6yQM" allowfullscreen></iframe></div></div><p>If you remember <a href="https://www.youtube.com/watch?v=znK652H6yQM"><u>Unbox Therapy’s infamous video of the iPhone 6</u></a>, then you’ll remember, as I do, how easily the iPhone 6 Plus frame bent under pressure. This kicked off the “Bendgate” controversy, sending Apple’s PR into crisis mode shortly after the video revealed the phone’s structural weakness. Apple learned a hard lesson from the ordeal, eventually switching to 7000-series aluminum with the subsequent iPhone 6s and reinforcing the internal frame. <em>— John Velasco</em></p><h2 id="2014-u2-s-songs-of-innocence-forcing-an-album-into-500-million-libraries">2014: U2’s Songs of Innocence — forcing an album into 500 million libraries 👎</h2><p>Who wouldn’t want a free new album from one of the world’s most popular bands? Millions of Apple users, apparently. During the launch of the iPhone 6, Tim Cook announced that he was treating everyone to U2’s newest album, which then showed up on every iPhone, iPad, and iPod — whether you wanted it or not. The backlash was so strong that U2 frontman Bono apologized for how it was delivered. <em>— MP</em></p><h2 id="2014-apple-watch-apple-s-first-major-new-product-category-under-tim-cook">2014: Apple Watch — Apple’s first major new product category under Tim Cook 👍</h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/38IqQpwPe7s?start=3426" allowfullscreen></iframe></div></div><p>The world was waiting to see what Apple’s first new major hardware category would be under Tim Cook and the Apple Watch was the result. Smartwatches were gaining ground thanks to early efforts from Fitbit and Pebble but Apple made its wearable an extension of your iPhone and a capable health and fitness device in its own right. Yearly releases and refinements followed like clockwork, but by always keeping the distinctive squircle design, Apple created a thriving cottage industry of bands, cases and accessories for the Apple Watch. Today, the Apple Watch (and Apple Watch Ultra) continues to be one of the company’s biggest products and is the most popular smartwatch in the world. — <em>Jeff Parsons</em></p><h2 id="2015-the-butterfly-keyboard-the-design-that-launched-lawsuits">2015: The Butterfly Keyboard: The design that launched lawsuits  👎 </h2><p>You know when your keyboard design inspires legal action that you have a problem. The stiff and flat <a href="https://www.tomsguide.com/opinion/why-is-apple-still-selling-macbooks-with-bad-butterfly-keyboards"><u>Butterfly Keyboard</u></a> debuted with the 12-inch MacBook in 2015, but the reports of sticky keys and double typing started to really surface in 2016 once the keyboard landed on the MacBook Pro. Apple would update the Butterfly keyboard multiple times but issues persisted, and class-action lawsuits followed in 2018. Apple retreated and launched the new “Magic Keyboard” in 2019 with traditional scissor switches, and the company began paying out <a href="https://www.tomsguide.com/news/macbook-butterfly-keyboard-lawsuit-payouts-are-imminent"><u>settlement checks</u></a> in 2024. <em>— Mark Spoonauer</em></p><h2 id="2015-magic-mouse-with-charging-port-on-bottom">2015: Magic Mouse with charging port on bottom?! 👎</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="oL3WQ8sQDBMoSSrUJwLNTa" name="Magic Mouse charging port - shutterstock_1091525693" alt="Apple Magic Mouse flipped upside down to charge" src="https://cdn.mos.cms.futurecdn.net/oL3WQ8sQDBMoSSrUJwLNTa.jpg" mos="" align="middle" fullscreen="" width="4000" height="2250" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>After the Hockey Puck mouse, Apple decided to continue the tradition of form over function when it comes to mice with the arrival of the Magic Mouse. While the Apple Magic Mouse is visually sleek with a single unbroken surface, the decision to put the Lightning port (and later, USB-C) on the underside of the mouse means there’s no way to use it while charging. The $79 mouse will provide up to 9 hours of use from a 2-minute charge, while a full charge will last over a month. But the decision to put the port in such an inaccessible place is still an odd one that Apple has kept in place for over a decade. — <em>Jeff Parsons</em></p><h2 id="2016-rip-headphone-jack-defended-as-courage">2016: RIP headphone jack: Defended as "courage” 👎 </h2><div class="youtube-video" data-nosnippet ><div class="video-aspect-box"><iframe data-lazy-priority="low" data-lazy-src="https://www.youtube-nocookie.com/embed/NS0txu_Kzl8?start=4910" allowfullscreen></iframe></div></div><p>When Apple introduced the iPhone 7 back in 2016, it shook the industry by doing something totally unexpected: removing the headphone jack. I remember when Apple’s Phil Schiller famously defended the move as an act of “courage.” While many — myself included — initially saw it as a lackluster excuse, Apple maintained that the extra internal space paved the way for a larger Taptic Engine and improved water-resistant construction. As we eventually learned, the massive success of AirPods would largely negate the need for the jack. Unsurprisingly, the iPhone’s rivals soon followed suit. <em>— John Velasco</em></p><h2 id="2016-airpods-apple-s-first-wireless-earbuds-become-a-cultural-phenomenon">2016: AirPods — Apple's first wireless earbuds become a cultural phenomenon 👍</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4986px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="uiZYHgydsMqLZRvANS5R6b" name="AirPods 2016 - GettyImages-599948266" alt="An attendee wears an Apple AirPods during a launch event on September 7, 2016 in San Francisco, California. Apple Inc. unveiled the latest iterations of its smart phone, the iPhone 7 and 7 Plus, the Apple Watch Series 2, as well as AirPods, the tech giant's first wireless headphones. (Photo by Stephen Lam/Getty Images)" src="https://cdn.mos.cms.futurecdn.net/uiZYHgydsMqLZRvANS5R6b.jpg" mos="" align="middle" fullscreen="" width="4986" height="2805" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>To Apple’s credit, the decision to remove the headphone jack single-handedly popularized the wireless earbuds form factor and, effectively, paved the way for the AirPods to corner the market. The AirPods launched in 2016 and delivered instant Bluetooth pairing, automatic pausing when you pulled them out of your ears and a handy charging case that delivered 24 hours of extra juice. Some criticized the design, but it wasn’t long before these buds were ubiquitous. <em>— Nick Pino</em></p><h2 id="2016-macbook-pro-touchbar-fail">2016: Macbook Pro Touchbar fail 👎 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:4491px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="mVMz6dAypegVugLhJT2tZa" name="MBP Touchbar - GettyImages-1408507762" alt="MacBook Pro 2016 with Touch Bar emojis" src="https://cdn.mos.cms.futurecdn.net/mVMz6dAypegVugLhJT2tZa.jpg" mos="" align="middle" fullscreen="" width="4491" height="2526" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Credit: Getty)</span></figcaption></figure><p>The Touch Bar was an OLED touchscreen strip added to the top of the MacBook Pro instead of traditional function keys. The idea behind it was to offer contextual controls based on the app being used. In some cases, it worked well — like using it to scrub through video edits quickly. However, many users complained that the innovative idea wasn’t as useful as having familiar and ever-present physical buttons. The Touch Bar lasted from 2016 until 2021 when it was phased out on newer MacBook Pros for the return of a standard function row. — <em>Jeff Parsons</em> </p><h2 id="2017-iphone-x-the-all-screen-shift-and-introduction-of-faceid">2017: iPhone X — The "all-screen" shift and introduction of FaceID 👍 </h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1500px;"><p class="vanilla-image-block" style="padding-top:56.27%;"><img id="GGnowxMzm6WxHpCjDWJLB6" name="iphone-x-faceID.jpg" alt="Face ID being used on an iPhone" src="https://cdn.mos.cms.futurecdn.net/GGnowxMzm6WxHpCjDWJLB6.jpg" mos="" align="middle" fullscreen="" width="1500" height="844" 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>We take the innovations inside the iPhone X for granted now, but they truly changed the game. Face ID revolutionized how we unlock our phones easily and security — and still has not been copied, while gesture-based navigation allowed Apple to ditch the Home button. Add in an edge-to-edge OLED display and the iPhone X was a true turning point for phones. <em>– Mark Spoonauer</em></p><h2 id="2017-batterygate-throttling-older-phones-without-telling-customers">2017: Batterygate — Throttling older phones without telling customers 👎 </h2><p>Another major PR crisis for Apple hit in late 2017 when it was discovered that the company was intentionally throttling the performance of older iPhones. Following the release of iOS 10.2.1, it was revealed that CPU speeds were being capped on devices with degraded batteries — an event that kicked off “Batterygate.” Apple defended the move as a way to extend the overall life of the devices, but it was the lack of transparency that sparked the most outrage. Critics accused Apple of attempting to force users to upgrade to new models, a controversy that eventually led to a massive $500 million class-action settlement. <em>— John Velasco</em></p><h2 id="2018-homepod-1st-gen-too-expensive-and-rings-on-wood-furniture">2018: HomePod 1st Gen — Too expensive (and rings on wood furniture) 👎</h2><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:69.67%;"><img id="cEZbuLxLJVanpXAZDMGsi5" name="HomePod_Sonos_damage.JPG.png" alt="White rings caused by the Apple Homepod (left) and the Sonos One (right). Credit: Mike Prospero/Tom's Guide" src="https://cdn.mos.cms.futurecdn.net/cEZbuLxLJVanpXAZDMGsi5.png" mos="" align="middle" fullscreen="" width="1510" height="1052" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: White rings caused by the Apple Homepod (left) and the Sonos One (right). Credit: Mike Prospero/Tom's Guide)</span></figcaption></figure><p>Several years after Amazon and Google launched their own smart speakers, Apple debuted the HomePod, which, despite excellent audio, cost much more than the competition. And, early reviewers (<a href="https://www.tomsguide.com/us/sonos-one-damages-wood,news-26628.html"><u>like yours truly</u></a>) also discovered that the silicone ring on the bottom of the speaker could leave white rings on wood furniture. To be fair, other smart speakers did too, but none so prominently as the HomePod. <em>— MP</em></p><h2 id="2019-airpower-cancellation">2019: AirPower Cancellation 👎</h2><p>Apple’s advanced charging mat was supposed to offer a sleek, all-in-one solution to wirelessly charge all your devices. In theory, you could put any Apple device anywhere on the pad to have it charge up. In practice, a prototype mat apparently got so hot it began to melt an AirPods case. In 2019, Apple officially confirmed the product was dead, saying “AirPower will not achieve our high standards and we have cancelled the project.” — <em>Jeff Parsons</em></p><h3 class="article-body__section" id="section-2020-present"><span>2020 – Present</span></h3>                    <div class= "tiktok-wrapper" style="min-height: 750px;"><blockquote class="tiktok-embed" cite="https://www.tiktok.com/@appledsign/video/7616452215871524128" data-video-id="7616452215871524128" style="max-width: 605px; min-width: 325px;">                        <section>                            <a target="_blank" title="@appledsign" href="https://www.tiktok.com/@appledsign">@appledsign</a>                            <p></p><a target="_blank" title="♬ INTERESTELLAR - Kore Blanco" href="https://www.tiktok.com/music/INTERESTELLAR-7420633921946782469">♬ INTERESTELLAR - Kore Blanco</a></section>                    </blockquote></div>                <h2 id="2020-apple-silicon-and-m1-ending-the-intel-era-with-a-bang">2020: Apple Silicon and M1 — ending the Intel era with a bang 👍 </h2><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="4PV65oTvweqibYsQuDG3yP" name="Apple Silicon 5-year LIST_v5" alt="Apple MacBook Pro M4 and a visualization of the M1 chip" src="https://cdn.mos.cms.futurecdn.net/4PV65oTvweqibYsQuDG3yP.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/Apple)</span></figcaption></figure><p>Talk about a gamble. The <a href="https://www.tomsguide.com/reviews/macbook-air-2020-m1"><u>MacBook Air M1</u></a> was Apple’s very first attempt at Apple Silicon in a Mac and a very purposeful move away from Intel. And it could not have gone better. Apple’s M1 chip delivered the longest battery life we’ve ever seen in a MacBook Air at nearly 15 hours in our testing — compared to 9:30 for the Intel model — and it offered remarkably fast performance to boot along with instant wake times. Plus, unlike Windows-on-ARM laptops, most of the software on Apple Silicon actually worked on day one. It would take several years for Intel to catch up. <em>— Mark Spoonauer</em></p><h2 id="2020-the-totally-underrated-magsafe-launches">2020: The totally underrated MagSafe launches 👍 </h2><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="4K43eXNUq366EN5oZtzmPn" name="TG_iPhone-12-Pro-Max_9.jpg" alt="iPhone 12 Pro Max review MagSafe" src="https://cdn.mos.cms.futurecdn.net/4K43eXNUq366EN5oZtzmPn.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>It might seem like a simple addition, but the arrival of magnetic charging in the <a href="https://www.tomsguide.com/reviews/iphone-12"><u>iPhone 12</u></a> heralded not only an easier way to charge iPhones but enabled all sorts of <a href="https://www.tomsguide.com/phones/i-just-tried-these-incredible-magsafe-accessories-and-they-put-apples-once-legendary-designs-to-shame"><u>MagSafe accessories</u></a>, from battery packs and charging stands to wallets, grips and iPhone mounts. Apple introduced <a href="https://www.tomsguide.com/news/ios-17-standby"><u>StandBy mode</u></a> a year later with iOS 17, which turns iPhones with always-on displays into alarm clocks. Samsung hasn’t even added magnets to its phones yet. <em>– Mark Spoonauer</em></p><h2 id="2020-airpods-max-smart-case-the-bra-case-that-offered-zero-protection">2020: AirPods Max "Smart Case" — The "bra" case that offered zero protection 👎</h2><p>Woof, for a company that prides itself on design, the AirPods Max’s carrying case is… a choice. AirPods Max owners were quick to take to social media to voice their concerns about how little protection the case offered and it’s still being used as a meme today to diss products with bad designs. The headphones are great, but the case is easily Apple’s worst-designed product of the last decade. <em>— Nick Pino</em></p><h2 id="2020-ted-lasso-the-kindness-hit-that-defined-the-early-tv-era">2020: Ted Lasso — The "kindness" hit that defined the early TV+ era 👍</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2452px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="6vyp5u9PJteJch4Lo3W3pR" name="Credit Apple.jpg" alt="Ted Lasso" src="https://cdn.mos.cms.futurecdn.net/6vyp5u9PJteJch4Lo3W3pR.jpg" mos="" align="middle" fullscreen="" width="2452" height="1379" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>I’d argue it was the infectious positivity of “Ted Lasso” that truly put Apple’s own streaming service on the map. For a while there, the main reason that you signed up and/or used a free trial of Apple TV+ (as it was called then) was to watch Ted (Jason Sudeikis) stumble his way through his new gig as head coach for Premier League soccer team, AFC Richmond. What followed was three seasons of feel-good, warm-hearted TV that made many of us “believe” in Apple’s exclusive shows. — <em>Martin Shore</em></p><h2 id="2021-apple-airtags-and-find-my-change-how-you-find-stuff">2021: Apple AirTags and Find My change how you find stuff 👍</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2393px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="p2NzJ5jj2Q3sZLTC2JRee9" name="TG_AirTags_lifestyle-1.jpg" alt="AirTag" src="https://cdn.mos.cms.futurecdn.net/p2NzJ5jj2Q3sZLTC2JRee9.jpg" mos="" align="middle" fullscreen="" width="2393" height="1346" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>GPS trackers have been around for a long time, but Apple’s take completely changed the field with the release of the <a href="https://www.tomsguide.com/reviews/apple-airtags"><u>AirTag</u></a> in 2021. This diminutive tracker relied on a totally different type of tech to help people track items down, by transforming every Apple device into a beacon for pinpointing the location of a missing AirTag. Apple leaned on Ultra-Wideband technology and its own custom U1 chip to offer Precision Finding through the Find My network. This made an immediate impact on the way we keep track of our personal items and, perhaps most importantly, it was and continues to be remarkably affordable. <em>— John Velasco</em></p><h2 id="2022-coda-s-best-picture-win-apple-becomes-first-streamer-to-win-the-big-oscar">2022: CODA’s Best Picture Win — Apple becomes first streamer to win the big Oscar 👍 </h2><p>Another big entertainment win came in 2022 when Apple Original Film “CODA” bested the likes of “Dune,” “West Side Story” and two Netflix releases — “The Power of the Dog” and “Don’t Look Up” — at the Oscars, scooping up Best Picture, plus wins for Troy Kotsur (Best Supporting Actor) and Siân Heder (Best Adapted Screenplay). It made history as the first movie with a predominantly Deaf cast, and it meant<a href="https://www.apple.com/uk/newsroom/2022/03/apples-coda-wins-historic-oscar-for-best-picture-at-the-academy-awards/"> Apple became the first streamer to win the top prize at the Academy Awards.</a> — <em>Martin Shore</em></p><h2 id="2024-the-apple-intelligence-waiting-game">2024: The Apple Intelligence waiting game 👎</h2><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="QxAKPSHY9yKgKrtQA5GuHV" name="Siri.shutterstock_2501930605" alt="Apple Intelligence on iPhone in front of an iPad" src="https://cdn.mos.cms.futurecdn.net/QxAKPSHY9yKgKrtQA5GuHV.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 the aftermath of ChatGPT’s meteoric rise, Apple needed to respond in 2024, and let's just say that <a href="https://www.tomsguide.com/ai/apple-intelligence"><u>Apple Intelligence</u></a> has not lived up to the hype so far. Two years later we’re still waiting on some of the key features promised — like in-app actions and personal context within Siri — and I had a chance to <a href="https://www.tomsguide.com/ai/apple-intelligence/wwdc-interview-apples-craig-federighi-and-greg-joswiak-on-siri-delay-voice-ai-as-therapist-and-whats-next-for-apple-intelligence"><u>interview Apple’s Craig Federighi and Greg ‘Joz’ Jozwiak</u></a> about the delay. Yes, we got some useful AI stuff like Writing Tools and Clean Up in Photos, but we’re still waiting for the revamped Siri. That should change with <a href="https://www.tomsguide.com/phones/iphones/siri-could-be-the-new-apple-intelligence-as-apple-plans-huge-overhaul-that-could-be-teased-at-wwdc"><u>iOS 27</u></a>. <em>— Mark Spoonauer</em></p><h2 id="2024-apple-vision-pro-wows-and-then-underwhelms">2024: Apple Vision Pro wows (and then underwhelms)  👎</h2><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="7Ym9WYcYYiBHiJR6QWowU7" name="Apple Vision Pro-6.jpg" alt="Apple Vision Pro" src="https://cdn.mos.cms.futurecdn.net/7Ym9WYcYYiBHiJR6QWowU7.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/smart-glasses/apple-vision-pro-review"><u>Apple Vision Pro</u></a> amazed me when it launched, but I called it a “revolution in progress” for a reason. Being able to navigate with just your eyes and finger gestures wowed, and I loved being able to watch 3D movies and just stare at my MacBook to get a supersized desktop. But the $3,500 asking price was way too high and the design too heavy. And while the new <a href="https://www.tomsguide.com/computing/augmented-reality/apple-vision-pro-m5-2025-review"><u>Vision Pro M5</u></a> is more powerful with a comfier strap, it’s just not accessible to the masses. Perhaps the rumored <a href="https://www.tomsguide.com/computing/smart-glasses/apple-glasses-everything-we-know-so-far"><u>Apple Glasses</u></a> could take visionOS to the spatial computing promise land. <em>– MS</em></p><h2 id="2025-pluribus-becomes-apple-tv-s-most-watched-show-ever">2025: Pluribus becomes Apple TV’s most-watched show ever 👍</h2><p>When it was revealed that Apple TV won the bidding war for “Pluribus,” it was a big deal. The “Breaking Bad” and “Better Call Saul” creator had just wrapped up producing two of the best shows of this century, so whatever was coming next was guaranteed to make a splash. But it exceeded expectations when it not only beat out “Severance” for the biggest launch of a drama series, but then became the most-watched series in Apple TV history, right before its season 1 finale. — <em>Malcolm McMillan</em></p><h2 id="2026-macbook-neo-puts-all-budget-windows-pcs-on-notice">2026: Macbook Neo puts all budget Windows PCs on notice 👍</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2643px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="DWcSMYEwCbp6frkMTdQ3FU" name="MacBook Neo A18 review-LIST1" alt="MacBook Neo shown on desk" src="https://cdn.mos.cms.futurecdn.net/DWcSMYEwCbp6frkMTdQ3FU.jpg" mos="" align="middle" fullscreen="" width="2643" height="1487" 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 a time when Windows laptop makers are raising prices due to RAMageddon, Apple has released the $599 <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review"><u>MacBook Neo</u></a> ($499 for education) — and it could wind up being the laptop of the decade. This system features pretty much everything most users want from a MacBook, including a sturdy aluminum design, a bright display and long battery life, in a very affordable package. <em>— Mark Spoonauer</em></p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Go all-in on Apple for under $2,500 — here's my complete Apple ecosystem setup for budget buyers ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/phones/iphones/go-all-in-on-apple-for-under-usd2-500-heres-my-complete-apple-ecosystem-setup-for-budget-buyers</link>
                                                                            <description>
                            <![CDATA[ Apple's products can command a heavy price tag, but the brand also offers a lot of really excellent budget options in almost all categories. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">LE4CCkCAmnCBQ3H78q9gWM</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VsrdQSiJR7pb7ksKbhiJFc-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 20 Mar 2026 09:17:26 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/VsrdQSiJR7pb7ksKbhiJFc-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple Collection new lead]]></media:description>                                                            <media:text><![CDATA[Apple Collection new lead]]></media:text>
                                <media:title type="plain"><![CDATA[Apple Collection new lead]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VsrdQSiJR7pb7ksKbhiJFc-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is known as a premium brand, and while it's true a lot of its products aren't easy on the bank balance, that's not the whole story. </p><p>In fact, the recent introduction of the <a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo</a> just served to remind me that Apple offers a budget option in almost every product category. And since the company's ace-up-the-sleeve is the synchronicity between devices, you don't have to spend as much anymore to access it.</p><p>So that got me to wondering: just how cheaply could you go all-in on Apple's ecosystem? The answer surprised me. For less than $2,300, you can get fully set up with all of Apple's core product categories: phone, tablet, watch, laptop, earphones, and a smart speaker — plus a couple of accessories thrown in for good measure. All that for just over the cost of two iPhone 17 Pros.</p><p>I've collected all the picks below so you can see for yourself. Do me a favor: if you've got any friends or family who snub Apple for being an overpriced, premium brand, just send them this article as proof.</p><h3 class="article-body__section" id="section-the-products"><span>The products</span></h3>        <div class="featured_product_block featured_block_hero" data-id="cdf2a9a2-8883-4177-8dca-ae89d70cc067">            <a href="https://www.bestbuy.com/product/apple-iphone-17e-256gb-soft-pink-at-t/JCQ6HQTZ46" data-model-name="iPhone 17e" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/ZoMu3gEkWdY5tcC4ejC7mG.jpg" alt="Apple, iPhone 17e"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">iPhone 17e</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7dd0bc27-1262-4145-9b60-cb1a5f54e0db">            <a href="https://www.amazon.com/Apple-Smartwatch-Midnight-Aluminum-Always/dp/B0FQFJ2WRG" data-model-name="Watch SE 3" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Vp7ok2ahNf38TbcwZzoL8J.jpg" alt="Apple, Apple Watch SE 3"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Watch SE 3</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="90c6fd8c-b518-4b31-a193-5091f63619ed">            <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ75TN5F" data-model-name="iPad 11 (11-inch)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/a3ifbSuKd3rL4hBFkR6qNK.jpg" alt="Apple, Apple iPad 11 (11-inch)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">iPad 11 (11-inch)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="df9f80ee-ea41-4198-872a-a28c451dd51c">            <a href="https://www.apple.com/shop/buy-homepod/homepod-mini" data-model-name="HomePod Mini" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/D2SJ2f8FuXxS5CbGPCuBqL.jpg" alt="Apple, Apple HomePod Mini"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">HomePod Mini</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ec245871-f3ac-4e29-973e-84d74d8d8651">            <a href="https://www.amazon.com/Apple-Bluetooth-Headphones-Personalized-Effortless/dp/B0DGHMNQ5Z" data-model-name="Airpods 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/PtovJHtz28QPHQBk4QeizM.jpg" alt="Apple, Apple Airpods 4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Airpods 4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="595f39bd-9905-4cfb-8a48-160518166b65">            <a href="https://www.amazon.com/Apple-2026-MacBook-13-inch-Laptop/dp/B0GR6FHGXX" data-model-name="MacBook Neo" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mjAGfLpbMj9bpFPpPsFdBP.jpg" alt="Apple, Apple Macbook Neo"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">MacBook Neo</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="b8272ea5-c03d-4701-b9dc-38bb098bfcd0">            <a href="https://www.amazon.com/Apple-AirTag-2nd-Generation-Precision/dp/B0GJTFXNRX" data-model-name="AirTag (2nd gen)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/sk6aSh5aW9armHcPGcUqLQ.jpg" alt="Apple, Apple AirTag"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">AirTag (2nd gen)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="428c1ceb-efac-4040-9675-770ff0214328">            <a href="https://www.amazon.com/gp/aw/d/B0DCH8VDXF" data-model-name="EarPods" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/YGM2QdFjLCHFLiDBuRwuNR.jpg" alt="Apple, Apple EarPods"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">EarPods</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7c21a0f3-0a8c-44d1-9e45-4d8cbe6774e2">            <a href="https://www.amazon.com/Apple-MagSafe-Charger-Fast-Charging-Capability/dp/B0FQFTXT7K" data-model-name="MagSafe Charger" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.37%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2ATJTmJqNbwPRnmXWvPmUS.jpg" alt="Apple, Apple MagSafe Charger"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">MagSafe Charger</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div><h3 class="article-body__section" id="section-the-reviews"><span>The reviews</span></h3><p>If you need any further proof that Apple's budget products are worth picking up — and you don't need to spring for the "Pro" models, just check out our reviews below:</p><ul><li><a href="https://www.tomsguide.com/phones/iphones/apple-iphone-17e-review">iPhone 17e review</a></li><li><a href="https://www.tomsguide.com/computing/ipads/ipad-11-2025-review">iPad 11 review</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">Apple Watch SE 3</a> <a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-review">review</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/apple-macbook-neo-review">MacBook Neo review</a></li><li><a href="https://www.tomsguide.com/reviews/apple-homepod-mini">HomePod mini review</a></li><li><a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4 review</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Your 'deep clean' is exactly what's ruining your earbuds, says audio professional ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/your-deep-clean-is-exactly-whats-ruining-your-earbuds-says-audio-professional</link>
                                                                            <description>
                            <![CDATA[ Here's the correct way to clean earbuds without damaging speakers or internal components. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">F2hirgJL8xhkCGjnESS4S5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/VVhnCCZu6xmju8pJ6PXgKo-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 17 Mar 2026 12:24:09 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Audio]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/sUwQW8yCGXFHeksAFjqSxZ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/VVhnCCZu6xmju8pJ6PXgKo-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple airpods pro 3]]></media:description>                                                            <media:text><![CDATA[Apple airpods pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[Apple airpods pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/VVhnCCZu6xmju8pJ6PXgKo-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Your earbuds go everywhere: the gym, your commute, the office, even bed. But despite daily use, most people never clean them properly. Earwax, sweat, and dust accumulate in the speaker mesh over time, affecting both sound quality and hygiene.</p><p>Worse, common cleaning methods actually damage earbuds. Cotton swabs push debris deeper into speakers, water can ruin internal electronics, and harsh chemicals can degrade protective coatings. What seems like basic maintenance often causes permanent harm.</p><p>James Grifo, Owner and CEO of <a href="https://audiovisualnation.com/" target="_blank">Audio Visual Nation</a> — an AV production company trusted by Microsoft and Nike — explains the proper cleaning process to protect your earbuds while keeping them hygienic. </p><h3 class="article-body__section" id="section-how-to-clean-earbuds-safely"><span>How to clean earbuds safely</span></h3><section class="howto-block">                    <h3>1. Start with a dry, soft brush</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/Hfk4whZfbRUQkweEGA87QS.jpg"                                        alt="AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/Hfk4whZfbRUQkweEGA87QS.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p><strong>Use a soft-bristled brush</strong> (a clean, dry toothbrush or dedicated electronics brush) to <strong>gently sweep debris away from the speaker mesh</strong>. Always brush outward, away from the mesh, so you're not pushing wax and dust further inside.</p><p>"The mesh is the most vulnerable part of the earbud," Grifo explains. "Even light pressure in the wrong direction can lodge debris deeper inside, and once it's in there, it's very difficult to remove without causing damage."</p><p><strong>Hold the earbud with the speaker mesh facing downward while brushing</strong> so that loosened debris falls away rather than settling back into the mesh. Use gentle strokes, as aggressive brushing can tear the delicate mesh or force particles through it into the speaker chamber.</p></p>                </section><section class="howto-block">                    <h3>2. Wipe the outer casing with a microfiber cloth</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/Z7wQWMJi79Uku2bUCaMp6R.jpg"                                        alt="Using a cloth to clean the apple airpods pro"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/Z7wQWMJi79Uku2bUCaMp6R.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>After brushing the mesh, <strong>use a dry microfiber cloth to wipe down the earbud's outer casing</strong>. Microfiber picks up oils and dust without scratching surfaces or leaving lint behind like paper towels or regular cloths do.</p><p>Focus on areas your fingers touch frequently, such as the stem, touch controls, and any textured grips. These spots accumulate skin oils and grime that affect both appearance and grip.</p><p>Grifo notes that "a microfiber cloth is one of the best tools you can use on any audio equipment. It's gentle, effective, and won't introduce any moisture to areas that can't handle it."</p></p>                </section><section class="howto-block">                    <h3>3. Use minimal moisture only on the casing</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/gBHZPL9hDCNZvthsZa7WeQ.jpg"                                        alt="Cleaning the case of the Apple Airpods Pro"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/gBHZPL9hDCNZvthsZa7WeQ.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>For stubborn grime on the outer casing only, <strong>slightly dampen your microfiber cloth with water or a small amount of isopropyl alcohol (70% or less)</strong>. Wring the cloth out thoroughly — it should feel barely damp, not wet.</p><p><strong>Never apply liquid directly to earbud</strong>s. Spray or pour onto the cloth first, then use it to spot-clean the casing. Keep all moisture away from the speaker mesh, charging ports, microphone openings, and any seams or gaps where liquid could seep inside.</p><p>Even water-resistant earbuds have limits. Their ratings protect against splashes or sweat during use, not deliberate exposure to liquids during cleaning. Moisture trapped inside can cause corrosion, short circuits, or adhesive failure over time.</p></p>                </section><section class="howto-block">                    <h3>4. Clean removable ear tips separately</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/wASGSCsR26WfWCxQ6hVexP.jpg"                                        alt="Cleaning the buds on the Apple Airpods Pro"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/wASGSCsR26WfWCxQ6hVexP.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>If your earbuds have silicone or foam ear tips, <strong>remove them before cleaning</strong>. These sit directly in your ear canal and collect the most earwax and bacteria, so they need thorough cleaning.</p><p>"Ear tips are the part that sits directly in your ear canal, so they need proper cleaning," says Grifo. "They're also the easiest part to clean safely, since you can fully detach them from the electronics."</p><p><strong>Silicone tips can be washed with mild soap and warm water</strong>. Rinse them thoroughly under running water to remove all soap residue, which can cause irritation if left behind. Air dry completely on a clean towel before reattaching to your earbuds.</p><p>Foam tips are more delicate and can't handle water the same way. <strong>Wipe them gently with a barely damp cloth instead, or replace them periodically</strong>, as they wear out faster than silicone ones.</p></p>                </section><section class="howto-block">                    <h3>5. Let everything dry completely before use</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/gyd4AatMmUsPU67V4d6bFm.jpg"                                        alt="Apple AirPods Pro vs. Amazon Echo Buds"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/gyd4AatMmUsPU67V4d6bFm.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Before putting the earbuds back in their charging case or your ears, ensure every component is fully dry. Even small amounts of trapped moisture cause internal damage over time.</p><p><strong>Let silicone ear tips air dry for at least an hour after washing</strong>. Place them on a clean, dry surface in a well-ventilated area—not directly in sunlight or near heat sources, which can degrade the silicone.</p><p>If you used any moisture on the earbud casing, <strong>wait 10-15 minutes before use</strong>. Check charging contacts and any openings to confirm no water droplets remain.</p><p>Moisture trapped in charging cases can also cause problems. If your case interior feels damp, <strong>wipe it with a dry microfiber cloth and leave it open to air out </strong>before putting the earbuds back inside.</p></p>                </section><h3 class="article-body__section" id="section-common-cleaning-mistakes-that-damage-earbuds"><span>Common cleaning mistakes that damage earbuds</span></h3><p>Grifo highlights several widespread cleaning habits that cause more harm than good. Avoiding these protects your earbuds from accidental damage.</p><section class="howto-block">                    <h3>Using cotton swabs on the mesh</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/b2utFrwaHhZtqH6bturKVR.jpg"                                        alt="Using a cotton bud to clean the apple airpods pro"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/b2utFrwaHhZtqH6bturKVR.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Cotton swabs seem like the obvious tool, but fibers snag on mesh and leave residue behind. Worse, the swab's pressure pushes wax deeper into the speaker instead of removing it. Stick to a soft brush that sweeps debris away rather than compacting it.</p></p>                </section><section class="howto-block">                    <h3>Running them under water</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/ysjL7akytz8bUEpDh43Q54.jpg"                                        alt="AirPods Pro 2 vs AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/ysjL7akytz8bUEpDh43Q54.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Unless your earbuds are rated fully waterproof (most are only water-resistant), running them under a tap risks moisture getting into internal electronics. Even waterproof models can fail if water enters through damaged seals or charging ports.</p></p>                </section><section class="howto-block">                    <h3>Using alcohol wipes or harsh cleaners</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/sbZYJURB7afC45mdBy8sdR.jpg"                                        alt="Rubbing alcohol on paper towel"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/sbZYJURB7afC45mdBy8sdR.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p>Pre-moistened wipes are often too wet and may contain chemicals that degrade silicone tips or strip protective coatings from the casing. If using isopropyl alcohol, apply it sparingly to a cloth — never directly to earbuds.</p></p>                </section><section class="howto-block">                    <h3>Cleaning infrequently and then over-correcting</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/DyRXRKibiQy4ZS3DBk7Q2F.jpg"                                        alt="AirPods Pro 2 in hand"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/DyRXRKibiQy4ZS3DBk7Q2F.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>"People tend to ignore their earbuds for months and then try to do a deep clean all at once," Grifo says. "By that point, the buildup is stubborn, and they end up using too much pressure or moisture trying to shift it. Little and often is always the better approach."</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-XjPmQW"></div>                            </div>                            <script src="https://kwizly.com/embed/XjPmQW.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/audio/airpods/3-genius-airpods-tips-that-boost-sound-quality-and-improve-fit">3 hidden AirPods features that instantly boost sound and comfort</a></li><li><a href="https://www.tomsguide.com/entertainment/music-streaming/spotifys-lossless-listening-makes-music-sound-brand-new-heres-how-to-enable-it">Spotify's Lossless Listening makes music sound amazing — how to enable it</a></li><li><a href="https://www.tomsguide.com/audio/airpods/i-just-discovered-these-5-airpods-features-and-theyre-game-changers">I just discovered these 5 hidden AirPods features — they're game-changers</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple finally launches AirPods Max 2 — and the ANC improvements could be a game-changer ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/over-ear-headphones/apple-finally-launches-airpods-max-2-and-the-anc-improvements-could-be-a-game-changer</link>
                                                                            <description>
                            <![CDATA[ It's been six long years since Apple launched a new pair of AirPods Max, but they're finally here. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">bynVx6LXEhNGuXA577cph6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/qqUU4mDyq5tQh3nZxsxwsF-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 16 Mar 2026 13:35:15 +0000</pubDate>                                                                                                                                <updated>Mon, 16 Mar 2026 13:38:55 +0000</updated>
                                                                                                                                            <category><![CDATA[Over-Ear Headphones]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ dave.leclair@futurenet.com (Dave LeClair) ]]></author>                    <dc:creator><![CDATA[ Dave LeClair ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/fyx7qYdxPMTNBhdnMfNmaB.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Senior News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/qqUU4mDyq5tQh3nZxsxwsF-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Max 2 colors]]></media:description>                                                            <media:text><![CDATA[AirPods Max 2 colors]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Max 2 colors]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/qqUU4mDyq5tQh3nZxsxwsF-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It's finally happened: Apple has revealed the AirPods Max 2. The company didn't hold an event or tease the announcement. Instead, a <a href="https://www.apple.com/newsroom/2026/03/apple-introduces-airpods-max-2-powered-by-h2/" target="_blank">post suddenly appeared on Apple's website</a> announcing the new model, which features the powerful H2 chip and vastly improved noise cancellation. </p><p>The company says the new AirPods Max 2 features better ANC, improved sound quality, and other intelligent features while maintaining the over-the-ear design for which Apple's most expensive headphones are known. And they're still expensive, coming with the same $549 price tag as the previous model.</p><h2 id="airpods-max-2-what-s-new">AirPods Max 2 — what's new?</h2><p>According to Apple, the H2 chip and new computational audio algorithms have allowed the cans to reach 1.5x more effective noise cancellation than the previous generation. For anyone who wants to keep the outside out while listening to high-quality music and podcasts, this could be a game-changer.</p><p>Beyond noise cancellation, Apple claims the headphones feature improved microphones that make the <a href="https://www.tomsguide.com/reference/how-to-use-airpods-pro/7">Transparency</a> sound even more natural. I've never liked the Transparency feature on AirPods, so I'd be curious to try the new and improved version to see how it is. </p><p>While most users will probably prefer Bluetooth, Apple also supports 24-bit, <a href="https://www.tomsguide.com/audio/airpods-max-is-getting-a-big-update-with-lossless-audio-and-ultra-low-latency-heres-how-it-works">48 kHz lossless audio</a> when connected via the included USB-C cable. For those willing to trade the convenience of wireless for sound quality, this could be a massive upgrade.</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:1960px;"><p class="vanilla-image-block" style="padding-top:66.73%;"><img id="snrTCZLdY4nhG6aqSg36W3" name="1773667713.jpg" alt="AirPods Max 2" src="https://cdn.mos.cms.futurecdn.net/snrTCZLdY4nhG6aqSg36W3.jpg" mos="" align="middle" fullscreen="" width="1960" height="1308" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple)</span></figcaption></figure><p>And for the wireless crowd, AirPods Max 2 offers lower-latency wireless audio, making playing in <a href="https://www.tomsguide.com/phones/iphones/ios-18-game-mode-what-is-it-and-how-does-it-work">Game Mode</a> on iOS, macOS, and iPadOS games feel even more responsive and immersive.</p><p><a href="https://www.tomsguide.com/audio/i-dont-like-spatial-audio-heres-what-it-needs-to-do-to-wow-me">Spatial Audio</a> is also seeing improvements. The company promises improved instrument localization, more accurate and consistent bass response, and more natural-sounding mids and highs.</p><p>The microphones are also better, with Apple saying they include "studio-quality audio recording," which "allows interviewers, podcasters, singers, and other creators to record their content with higher-quality audio and more natural vocal texture." </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-X1AaoX"></div>                            </div>                            <script src="https://kwizly.com/embed/X1AaoX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/feature/5-signs-you-need-to-upgrade-your-headphones">5 signs you need to upgrade your wireless headphones</a></li><li><a href="https://www.tomsguide.com/feature/I-just-tested-skullcandy-aviator-900-anc-and-theyre-awesome-in-many-ways">I just tested Skullcandy’s high-end headphones and they’re awesome in so many ways</a></li><li><a href="https://www.tomsguide.com/opinion/5-ways-the-samsung-galaxy-buds-4-can-revive-the-series-and-beat-the-airpods">5 ways the Samsung Galaxy Buds 4 can revive the series and beat the AirPods</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I ditched my AirPods Pro 2 for JLab's $29 running earbuds for two weeks — and I forgot I was using cheaper buds ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/earbuds/i-ditched-my-airpods-pro-2-for-jlabs-usd29-running-earbuds-for-two-weeks-and-i-forgot-i-was-using-cheaper-buds</link>
                                                                            <description>
                            <![CDATA[ I swapped my AirPods for JLab Go Sport+ for two weeks. How do the $29 JLabs hold up against the premium, $249 AirPods? Let's find out. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">EWr3CBgJRTWpTmPqg4ddW5</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/7jPsopakispDSbAvHoSZSo-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sat, 14 Mar 2026 08:00:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Earbuds]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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 senior 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. She has a strong interest in audio gear and the music world. &lt;/p&gt;&lt;p&gt;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 novels, or stressing over NYT Games.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/7jPsopakispDSbAvHoSZSo-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[a side by side image of the author wearing airpods and the jlab go sport+ running earbuds both on the tom&#039;s guide blue background]]></media:description>                                                            <media:text><![CDATA[a side by side image of the author wearing airpods and the jlab go sport+ running earbuds both on the tom&#039;s guide blue background]]></media:text>
                                <media:title type="plain"><![CDATA[a side by side image of the author wearing airpods and the jlab go sport+ running earbuds both on the tom&#039;s guide blue background]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/7jPsopakispDSbAvHoSZSo-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Yes, the JLab Go Sport+ cost $29 — which makes them just $5 more than Netflix. I don't know about you, but $29 is way cheaper than my monthly gym membership, cheaper than my weekly grocery bill, and a fraction of the price of my running leggings. </p><p>Obviously, if you already have a pair of the <a href="https://www.tomsguide.com/audio/earbuds/best-noise-canceling-earbuds">best earbuds</a>, like I do, you might not want to shell out even <em>more</em> for some of the <a href="https://www.tomsguide.com/best-picks/best-running-headphones">best running earbuds</a>. But trust me — proper running earbuds make a huge difference. It's like running with fashion sneakers as opposed to proper<a href="https://www.tomsguide.com/best-picks/best-running-shoes"> running shoes</a>. The <a href="https://tomsguide.com/audio/earbuds/jlab-go-sport-plus-review">JLab Go Sport+</a> have one job, and they do it really well. </p><p>But I wanted to <em>really</em> test them. As I primarily use my <a href="https://www.tomsguide.com/reviews/airpods-pro-2-review">AirPods Pro 2</a> for everything, including running, I wondered how these $29 running buds would stack up against my $249 (but now discontinued) AirPods Pro 2. Can these ultra-cheap buds really beat Apple?</p><div class="product"><a data-dimension112="9eb08ffd-a66f-4822-8e6e-97d7f23a9f4c" data-action="Deal Block" data-label="The JLab Go Sport+ are ridiculously affordable. You might think that $29 earbuds sound and feel terrible, but you'd be very, very wrong. These 'buds are super comfortable — I forgot I was wearing them — and, while the sound quality won't impress serious audiophiles, it's rich and bassy, perfect for running." data-dimension48="The JLab Go Sport+ are ridiculously affordable. You might think that $29 earbuds sound and feel terrible, but you'd be very, very wrong. These 'buds are super comfortable — I forgot I was wearing them — and, while the sound quality won't impress serious audiophiles, it's rich and bassy, perfect for running." data-dimension25="$29" href="https://www.amazon.com/JLab-Wireless-Featuring-Bluetooth-Playtime/dp/B0CYNFWD2R" 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="m3d8JNJ29kNT9nonBpVidZ" name="JLab Go Sport+ sq coral" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/m3d8JNJ29kNT9nonBpVidZ.jpg" mos="" align="middle" fullscreen="" width="800" height="800" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The JLab Go Sport+ are ridiculously affordable. You might think that $29 earbuds sound and feel terrible, but you'd be very, very wrong. These 'buds are super comfortable — I forgot I was wearing them — and, while the sound quality won't impress serious audiophiles, it's rich and bassy, perfect for running.<a class="view-deal button" href="https://www.amazon.com/JLab-Wireless-Featuring-Bluetooth-Playtime/dp/B0CYNFWD2R" target="_blank" rel="nofollow" data-dimension112="9eb08ffd-a66f-4822-8e6e-97d7f23a9f4c" data-action="Deal Block" data-label="The JLab Go Sport+ are ridiculously affordable. You might think that $29 earbuds sound and feel terrible, but you'd be very, very wrong. These 'buds are super comfortable — I forgot I was wearing them — and, while the sound quality won't impress serious audiophiles, it's rich and bassy, perfect for running." data-dimension48="The JLab Go Sport+ are ridiculously affordable. You might think that $29 earbuds sound and feel terrible, but you'd be very, very wrong. These 'buds are super comfortable — I forgot I was wearing them — and, while the sound quality won't impress serious audiophiles, it's rich and bassy, perfect for running." data-dimension25="$29">View Deal</a></p></div><h2 id="challenge-1-the-fit">Challenge 1: the fit</h2><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="8AZk3FGwNhMCCoiQG4GW3Y" name="Jlab_Go_sport_ 7.JPG" alt="the jlab go sport+ earbuds photographed against the blue tom's guide background, showing charging case and wearing style" src="https://cdn.mos.cms.futurecdn.net/8AZk3FGwNhMCCoiQG4GW3Y.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>Running earbuds and lifestyle earbuds have one major difference: fit. The entire purpose of a running earbud is to stay put in your ear hole, no matter how vigorously you're running. </p><p>That's why running earbuds tend to have a 'hook'-style design. This hook fits around the outside of your ear cartilage to prevent falling out or wobbling inside your ear. </p><p>It goes without saying that the JLab Go Sport+ fit much, much more securely than my AirPods Pro 2. That's not to suggest that my AirPods fit precariously or that AirPods aren't also great for running — it's more that the Go Sport+ have one job, and they do it really well. </p><p>Take a look at my colleague Nikita modeling the Go Sport+ — look at how the hook fits around her ear tightly. </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="UKgvsM4gDc4qQDaTjAQd2Y" name="Jlab_Go_sport_ 8.JPG" alt="the jlab go sport+ earbuds photographed against the blue tom's guide background, showing charging case and wearing style" src="https://cdn.mos.cms.futurecdn.net/UKgvsM4gDc4qQDaTjAQd2Y.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>When I was running, I forgot I was wearing them. The Go Sport+ are that secure. Alright, getting them in my ears took a few seconds longer than your AirPods or standard earbuds, but once they were in, they were in. No movement. Like they were soldered onto my cartilage itself. This is ideal for running, as your constant up-down movement can dislodge generic earbuds. </p><p>Comparatively, AirPods fit more like those aforementioned generic earbuds. As I have the Pro 2, the silicone tip makes the buds more secure than AirPods 4 (sans silicone tip). Even so, they still move around a little when I run, enough to necessitate my repositioning them mid-sprint. </p><p>I don't think this is a surprise, but the JLab Go Sport+ win over the AirPods Pro 2 for fit and security. If you want a pair of cheap earbuds you don't mind getting sweaty — and you want them to lock onto your ears so well you forget you're wearing them — then the Go Sport+ will not let you down. </p><h2 id="challenge-2-sound-quality">Challenge 2: sound quality</h2><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="n7mzuj5guXZ2YUkuUhTozX" name="Jlab_Go_sport_ 6.JPG" alt="the jlab go sport+ earbuds photographed against the blue tom's guide background, showing charging case and wearing style" src="https://cdn.mos.cms.futurecdn.net/n7mzuj5guXZ2YUkuUhTozX.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>Don't think I'm about to throw away my AirPods Pro 2 anytime soon, though. There's (obviously) one main area where the Pro 2 reign supreme: sound quality. </p><p>Of course, no one buys $29 with the intention of getting some <a href="https://www.tomsguide.com/audio/earbuds/bose-quietcomfort-ultra-earbuds-2-review">Bose QuietComfort Ultra Earbuds Gen 2</a>-dupes or anything. You know what to expect when you pay $29 for earbuds. </p><p>I don't think you're really focusing on sound quality when you're running, though. Or, I know <em>I'm</em> not. All I need is a powerful low-end with enough bass to help me propel my legs forward. I try to listen to 180BPM+ music when I run, so I can easily fix my slow cadence. </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="JdSaFDHQGyeyUZ7RdDtn2Y" name="Jlab_Go_sport_ 11.JPG" alt="the jlab go sport+ earbuds photographed against the blue tom's guide background, showing charging case and wearing style" src="https://cdn.mos.cms.futurecdn.net/JdSaFDHQGyeyUZ7RdDtn2Y.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 Go Sport+ have <em>plenty</em> of bass. When I was listening to electronic music, the synths and drum machines crashed through the earbuds with gusto. In more complex soundscapes — like when I was listening to Slipknot, Linkin Park, and Evanescence — some of the guitars muddied. But even so, these are a) running earbuds, and b) $29. </p><p>My AirPods Pro 2 sound much, much better than the Go Sport+. The mids are clearer, and the bass has more separation. However, I was also pushing the darn things back in every five minutes, which distracted me from my workout. </p><p>I'm going to keep using the Go Sport+ for runs, but continue to wear my AirPods Pro 2 for everything else. Now I've experienced a run without needing to readjust my earbuds every 0.2 seconds, I'm not sure I can go back. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OKQLoe"></div>                            </div>                            <script src="https://kwizly.com/embed/OKQLoe.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/workouts/no-planks-or-sit-ups-my-favorite-pilates-instructor-just-shared-this-5-minute-deep-core-routine-and-it-targets-the-stabilizer-muscles-to-build-strength-and-stability"><strong>No planks or sit-ups: This 5-minute Pilates routine targets your deep core to build strength and stability</strong></a></li><li><a href="https://www.tomsguide.com/wellness/fitness/im-a-personal-trainer-why-you-should-sit-in-a-spanish-squat-for-45-seconds-to-build-strength-without-knee-pain-it-feels-better-than-any-stretch"><strong>I'm a personal trainer: Why you should sit in a Spanish squat for 45 seconds to build strength without knee pain (it feels better than any stretch)</strong></a></li><li><a href="https://www.tomsguide.com/wellness/running/i-ran-50-miles-in-the-mizuno-hyperwarp-pure-and-its-the-most-exciting-racing-shoe-ive-tested-this-year"><strong>I ran 50 miles in the Mizuno Hyperwarp Pure, and it’s the most exciting racing shoe I’ve tested this year</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple solved budget laptops with MacBook Neo — now a touchscreen MacBook Ultra could be next ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/macbooks/apple-solved-budget-laptops-with-macbook-neo-now-a-touchscreen-macbook-ultra-could-be-next</link>
                                                                            <description>
                            <![CDATA[ Apple is reportedly expanding its MacBook lineup again with a high-end MacBook Ultra featuring OLED touchscreens. Here’s how this new “ultra-premium” tier aims to redefine luxury computing alongside the budget MacBook Neo. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">AMQepMZd8ADHdyvEEsCL8E</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/aeAsuGHPsdeNftt767USaK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 09 Mar 2026 12:06:09 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[MacBooks]]></category>
                                                    <category><![CDATA[iPhones]]></category>
                                                    <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[Laptops]]></category>
                                                    <category><![CDATA[Phones]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Jason England ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/v4fSq5U4uZUEtGY2BwNuJ6.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jason brings a decade of tech and gaming journalism experience to his role as a Managing Editor of Computing at Tom&#039;s Guide. He has previously written for Laptop Mag, Tom&#039;s Hardware, Kotaku, Stuff and BBC Science Focus. In his spare time, you&#039;ll find Jason looking for good dogs to pet or thinking about eating pizza if he isn&#039;t already.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/aeAsuGHPsdeNftt767USaK-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[MacBook Pro M5]]></media:description>                                                            <media:text><![CDATA[MacBook Pro M5]]></media:text>
                                <media:title type="plain"><![CDATA[MacBook Pro M5]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/aeAsuGHPsdeNftt767USaK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple is currently playing a high-stakes game of “cover the spread.” Right now, we’ve got the <a href="https://www.tomsguide.com/computing/macbooks/i-just-went-hands-on-with-the-usd599-macbook-neo-its-game-over-for-chromebooks-and-cheap-windows-laptops">MacBook Neo</a> for the budget-conscious users — putting <a href="https://www.tomsguide.com/best-picks/best-chromebooks">Chromebooks</a> and <a href="https://www.tomsguide.com/computing/windows-operating-systems/i-review-windows-laptops-for-a-living-and-these-are-the-best-keyboard-shortcuts-i-found-on-reddit">Windows laptops</a> on notice. But next up (according to a report by <a href="https://www.bloomberg.com/news/newsletters/2026-03-08/apple-to-expand-ultra-lines-after-599-macbook-neo-3d-printed-aluminum-imacs-mmhpa12d" target="_blank">Mark Gurman</a>), the Cupertino giant is turning its gaze back to the stratosphere.</p><p>The rumored MacBook Ultra suggests that Apple isn’t content with just being “Pro” anymore, and this new higher tier could represent a massive pivot. For years, the line between iPad and Mac was a church and state affair, but the Ultra could break that wall down with an OLED panel and (finally) a touchscreen.</p><h2 id="what-to-expect-from-the-macbook-ultra">What to expect from the MacBook 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="XkiXgoAoW3jRM9sgW2GeB7" name="MacBook Pro M5--16" alt="MacBook Pro M5" src="https://cdn.mos.cms.futurecdn.net/XkiXgoAoW3jRM9sgW2GeB7.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>Well, it’s in the name! Expect it to be the “ultra” interpretation of an Apple laptop. Gurman reports that this notebook will sit above the MacBook Pros, rather than replace them. That (in my mind) is the best course of action, because there’s a whole lot of Pro fans (me included) who don’t need the features a potential Ultra could be touting, and that subsequent price increase.</p><p>So to top the beastly Pros, the Cupertino crew’s going to have to go big. And that may mean two key things: OLED and touchscreen capabilities. This would be a huge change from keeping the iPad and Mac distinct in the way you use them, but could be huge for creators.</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="fTLBUGYWebi9ZYA6AY93K7" name="iPad Pro M5--01-LIST" alt="iPad Pro M5" src="https://cdn.mos.cms.futurecdn.net/fTLBUGYWebi9ZYA6AY93K7.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>Now, figuring out where the pricing will go, you can take a look at what happened in other moments where Apple brought an OLED to the party. The iPhone X launched in 2017 with this display tech, and the <a href="https://www.tomsguide.com/computing/ipads/ipad-pro-m5-review">iPad Pro</a> with Tandem OLED in 2024. In both situations, the price went up by roughly 20%.</p><p>Of course, this isn’t taking into account any RAM price crisis-based shenanigans later in the year, but this is the kind of uplift you can expect from a MacBook Ultra. Also, given the anticipation that this notebook lands closer to the fall, I’d expect these to come with an M6 chip — using a new “chips on a system” architecture that you already see in <a href="https://www.tomsguide.com/computing/macbooks/im-using-pizza-to-explain-apples-m5-pro-and-m5-max-and-now-im-convinced-laptops-are-about-to-change">M5 Pro and M5 Max</a>.</p><h2 id="going-all-ultra">Going all-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:1992px;"><p class="vanilla-image-block" style="padding-top:56.28%;"><img id="hxWF8JHH73hydhmk2vQ4mY" name="iPhone Fold" alt="A render of the potential upcoming iPhone foldable device" src="https://cdn.mos.cms.futurecdn.net/hxWF8JHH73hydhmk2vQ4mY.jpg" mos="" align="middle" fullscreen="" width="1992" height="1121" 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>But this isn’t the <em>only </em>Ultra device that’s set to come. Gurman does suggest two other products may sport this moniker:</p><ul><li><strong>iPhone Ultra: </strong>this could very well be the first <a href="https://www.tomsguide.com/phones/iphones/iphone-fold-specs-potentially-revealed-heres-how-it-would-stack-up-against-samsung-galaxy-z-fold-8">foldable iPhone</a> Apple makes with a price tag over $2,000.</li><li><strong>AirPods Ultra: </strong>these could be the rumored <a href="https://www.tomsguide.com/audio/earbuds/apple-reportedly-working-on-airpods-with-cameras-heres-what-they-could-do">AirPods with a built-in camera</a> to fuel real-time visual intelligence and run the new Siri we’re expecting to see more of at WWDC 2026.</li></ul><p>So one thing is becoming clear — Apple’s hitting both the budget and premium prices hard with a wider range of devices to suit all bank balances. The MacBook Neo is going to be a nightmare for Chromebooks and budget Windows laptops, while this rumored MacBook Ultra will gun straight for the luxury market.</p><p>It’s going to be interesting to see how this all plays out over the course of 2026.</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/smart-glasses/2026-is-the-year-smart-glasses-will-finally-stop-being-cringe-but-has-their-moment-come-too-late">2026 is the year smart glasses will finally stop being cringe, but has their moment come too late?</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/macbook-neo-vs-macbook-air-m1">MacBook Neo vs MacBook Air M1: There’s a clear (and colorful) winner</a></li><li><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">I zoned out and stopped listening to my fiancée — and the Even Realities G2 made sure she never knew</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Don't buy AirPods, buy EarPods — here's 5 reasons why ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/earbuds/dont-buy-airpods-buy-earpods-heres-5-reasons-why</link>
                                                                            <description>
                            <![CDATA[ As everything gets more expensive, it's more important than ever to keep costs down — and the perfect place to start is a pair of $20 EarPods as your next earbuds. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zUYAPNGPvsGqcT5FRNCFYC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/FhJFupbhZUdcWp4JFHH8jQ-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 19 Feb 2026 11:35:05 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Earbuds]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/FhJFupbhZUdcWp4JFHH8jQ-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Apple EarPods]]></media:description>                                                            <media:text><![CDATA[Apple EarPods]]></media:text>
                                <media:title type="plain"><![CDATA[Apple EarPods]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/FhJFupbhZUdcWp4JFHH8jQ-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The world is, currently, very expensive. I watch my beloved Nespresso coffee pods get more costly by the day, and my packets of sandwich ham seem to rise in price by a few cents every week. Let's not even get started on eggs — waking up just isn't the same without my butter-filled morning scramble. </p><p>Headphones and earbuds are expensive, and in a time when it's more important than ever to save a few bucks (especially when a ham sandwich costs what it does now), they're a luxury that's easy to forgo or cheap out on when replacing old or damaged models.</p><p>But what do you get? EarPods. No matter if you're an Apple user with an iPhone or an Android faithful wielding a Pixel thing, you should get EarPods. For $20 bucks, you're not going to do any better than Apple's cheapest buds — and there are other benefits besides price. Let me explain.</p><div class="product"><a data-dimension112="4686f00a-066a-4a4c-a0e7-4653234a1ad6" data-action="Deal Block" data-label="Are they perfect? No. But they're only twenty dollars, and they still sound pretty good these days. The mic quality is going to be far superior to any wireless model, thanks to the cable that connects them to your phone. And if they break? Well, they're $20. You'd need to buy 12 pairs before you've spent as much as for AirPods Pro 3." data-dimension48="Are they perfect? No. But they're only twenty dollars, and they still sound pretty good these days. The mic quality is going to be far superior to any wireless model, thanks to the cable that connects them to your phone. And if they break? Well, they're $20. You'd need to buy 12 pairs before you've spent as much as for AirPods Pro 3." data-dimension25="$17" href="https://www.amazon.com/gp/aw/d/B0DCH8VDXF/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:830px;"><p class="vanilla-image-block" style="padding-top:180.72%;"><img id="VA3BdhZZFkouyrmwJGPm9L" name="EarPods" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/VA3BdhZZFkouyrmwJGPm9L.png" mos="" align="middle" fullscreen="" width="830" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Are they perfect? No. But they're only twenty dollars, and they still sound pretty good these days. The mic quality is going to be far superior to any wireless model, thanks to the cable that connects them to your phone. And if they break? Well, they're $20. You'd need to buy 12 pairs before you've spent as much as for AirPods Pro 3.<a class="view-deal button" href="https://www.amazon.com/gp/aw/d/B0DCH8VDXF/" target="_blank" rel="nofollow" data-dimension112="4686f00a-066a-4a4c-a0e7-4653234a1ad6" data-action="Deal Block" data-label="Are they perfect? No. But they're only twenty dollars, and they still sound pretty good these days. The mic quality is going to be far superior to any wireless model, thanks to the cable that connects them to your phone. And if they break? Well, they're $20. You'd need to buy 12 pairs before you've spent as much as for AirPods Pro 3." data-dimension48="Are they perfect? No. But they're only twenty dollars, and they still sound pretty good these days. The mic quality is going to be far superior to any wireless model, thanks to the cable that connects them to your phone. And if they break? Well, they're $20. You'd need to buy 12 pairs before you've spent as much as for AirPods Pro 3." data-dimension25="$17">View Deal</a></p></div><h2 id="1-no-battery-life">1. No battery 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="5xFCptnSXMQ6qRVE42rp4b" name="Airpods_pro 1.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/5xFCptnSXMQ6qRVE42rp4b.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>Look, I love wireless earbuds. I really do. But there's nothing quite as annoying as opening your buds case, slipping them in your ear, only to receive no sound because you completely forgot to charge them. </p><p>Or, when you're on a long trip, and you have no time to add battery life to your buds. Musicless train journeys are simply a no-go in my books.</p><p>You know what doesn't have battery? EarPods. They plug into your phone, play music and take calls. They don't need recharging, so you won't need to worry about music-less train journeys anymore. No brainer.</p><h2 id="2-more-intuitive-controls">2. More intuitive controls</h2><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="NTcngpT7jaWwSFpAqsNX48" name="TG_airpods-pro-vs-earbuds-4.jpg" alt="The Apple EarPods on a stone wall" src="https://cdn.mos.cms.futurecdn.net/NTcngpT7jaWwSFpAqsNX48.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>You see that funny rectangle on the right EarPods cable? That's a controller, and it's <em>so </em>much easier to use than the touch controls on your AirPods. And AirPods controls are great.</p><p>You press the volume up button to turn the sound up. You press the volume down button for the sound to go down. You press the middle button to play pause, and the volume up and down buttons twice to skip and go back a track. That's it. Those are the controls.</p><p>Not only does this placement make them easy to access, physical buttons are also a cinch if you're wearing big bulky gloves in colder weather. </p><h2 id="3-harder-to-lose">3. Harder to lose</h2><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="ASdWQTCTF9zU3GEPCHyB5b" name="Airpods_pro 5.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/ASdWQTCTF9zU3GEPCHyB5b.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>AirPods (and other wireless earbuds) are small. They're tiny, in fact, in the grand scheme of things. And what happens to tiny things? They get lost — a universal truth that follows us all. Train seat? See ya later, left earbud. Or <em>never again.</em></p><p>By virtue of being attached by a cable, you're far less likely to lose your EarPods. Sure, if you leave them on the tray table and leave the train, you might, but you're not going to drop one down the sofa and be left with just one ear of music.</p><p>And if you do leave them on the tray table, you can buy another pair. Because they're $20.</p><h2 id="4-increased-call-quality">4. Increased call quality</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5705px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hfk4whZfbRUQkweEGA87QS" name="AirPods Pro 3" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Hfk4whZfbRUQkweEGA87QS.jpg" mos="" align="middle" fullscreen="" width="5705" height="3209" 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>Call quality with modern wireless earbuds is fine, but it's never exemplary. There's a reason most companies supply you with a wired headset when you join — they sound better. </p><p>You see, when taking a call, the connection suddenly has to deal with two-way communication. One is the sound you can hear, being transferred from your phone or laptop to the buds. </p><p>The other is your voice being transferred from the microphone in your buds to your phone. That's double the audio streams, and Bluetooth just isn't man enough to handle both with much grace.</p><p>A cable, though? A cable does just fine — a pair of EarPods will, I'd wager, outperform even the most expensive wireless headphones mics in a head-to-head battle.</p><h2 id="5-they-re-20">5. They're $20</h2><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="PRv2Mc7wWoyVDsGg88NLn7" name="TG_airpods-pro-vs-earbuds-1.jpg" alt="A man wearing the Apple EarPods" src="https://cdn.mos.cms.futurecdn.net/PRv2Mc7wWoyVDsGg88NLn7.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>Look, I know I said I wouldn't talk about price, but I have to. The EarPods are cheap. They cost less than a family meal at Burger King. They're cheaper than Coffee for two at a nice cafe in Manhattan. There are everything bagels that cost more than the EarPods. They're <em>so cheap.</em></p><p>And you know what? That's important. Because, like I said up at the very top, the world is currently putting us through the financial wringer, and saving money where you can is paramount. And getting EarPods instead of AirPods is a great way of making sure there are some eggs in the fridge for that all-important morning scramble.</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/online-security/1-billion-personal-records-from-26-countries-exposed-in-massive-new-data-leak-how-to-stay-safe">1 billion personal records exposed in massive new data leak — full names, addresses, phone numbers and more</a></li><li><a href="https://www.tomsguide.com/audio/headphones/this-usd70-usb-c-iphone-dongle-makes-my-wireless-headphones-sound-amazing-and-i-dont-think-i-could-live-without-it-anymore">This $70 USB-C iPhone dongle makes my wireless headphones sound amazing — and I don't think I could live without it anymore</a></li><li><a href="https://www.tomsguide.com/computing/apples-ai-wearable-roadmap-is-getting-wild-prepare-for-ai-pendant-smart-glasses-and-airpods-with-cameras">Apple's AI wearable roadmap is getting wild: Apple Glasses, AI pendant and AirPods with cameras detailed in new report</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple's wearable trifecta: Apple Glasses, AI pendant and AirPods with cameras detailed in new report ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/computing/apples-ai-wearable-roadmap-is-getting-wild-prepare-for-ai-pendant-smart-glasses-and-airpods-with-cameras</link>
                                                                            <description>
                            <![CDATA[ Apple is reportedly working on three upcoming  AI wearables set to be powered by an upgraded Siri, including an AI pendant, AI smart glasses and AI AirPods with cameras. And there's all expected to link to an iPhone. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">VqTeVjU2hPzFRvD4YnoCcg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/T2nsAAmkxgTc8YGE7ftSzB-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 18 Feb 2026 12:18:38 +0000</pubDate>                                                                                                                                <updated>Wed, 18 Feb 2026 18:36:26 +0000</updated>
                                                                                                                                            <category><![CDATA[Computing]]></category>
                                                    <category><![CDATA[AI]]></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>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/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>Apple is doubling down on its AI efforts, and not just with its <a href="https://www.tomsguide.com/ai/apple-intelligence/apple-confirms-siri-2-0-is-still-coming-in-2026-heres-what-that-means-for-your-iphone">Siri 2.0 coming in 2026</a>. As reported by <a href="https://www.bloomberg.com/news/articles/2026-02-17/apple-ramps-up-work-on-glasses-pendant-and-camera-airpods-for-ai-era" target="_blank">Bloomberg's Mark Gurman</a>, the Cupertino tech giant is working on an <a href="https://www.tomsguide.com/wellness/fitness-trackers/forget-the-apple-watch-your-next-wearable-could-be-an-ai-powered-apple-pin" target="_blank">Apple AI pendant</a>, the long-rumored <a href="https://www.tomsguide.com/computing/smart-glasses/apple-glasses-everything-we-know-so-far">Apple AI smart glasses</a>, and <a href="https://www.tomsguide.com/audio/airpods/airpods-pro-3-rumors-indicate-a-new-model-with-cameras-but-like-why">AI AirPods</a> that come equipped with cameras. These have been rumored, but Gurman claims that Apple is actively developing these new AI wearable products. </p><p>The AI AirPods with cameras could launch this year, and the Apple glasses could start production as soon as December with a 2027 launch. The AI pendant could also launch next year. Here's a closer look at what to expect from Apple's new lineup of AI wearables. </p><h2 id="apple-ai-pendent">Apple AI Pendent</h2><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="J3AGYbHw8ipvACe34jt69o" name="Apple AirTag 2 review" alt="Apple AirTag 2 held in the hand." src="https://cdn.mos.cms.futurecdn.net/J3AGYbHw8ipvACe34jt69o.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>Previously, Apple's rumored AI device had been expected to be an AI pin, not unlike the <a href="https://www.tomsguide.com/ai/the-humane-ai-pin-is-officially-dead-and-hp-is-picking-up-humanes-leftovers">Humane AI Pin</a>. However, Gurman suggests it could be worn like a pendant, hence an Apple AI pendant. </p><p>The AI wearable will reportedly come in the same size as the recent <a href="https://www.tomsguide.com/phones/apple-airtag-2-review">AirTag 2</a>, possibly along with an aluminum flat disk and glass. With a clip, this will allow users to attach it to their clothing or bag, but reports also note there's a hole so it can be used as a necklace. </p><p>As for what's under the (likely small) hood, the AI pendant will feature a camera for visuals, a microphone for sound and a dedicated chipset — all of which will be used for users to interact with Siri via an iPhone. Notably, the cameras won't be used for taking pictures or video, but will be always-on to record the user's surroundings. </p><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-OLKAKW"></div>                            </div>                            <script src="https://kwizly.com/embed/OLKAKW.js" async></script><p>According to a leak from <a href="https://www.theinformation.com/articles/apple-developing-ai-wearable-pin" target="_blank">The Information</a>, the pendant will come equipped with two cameras, three microphones and a small speaker, along with a physical button. This would allow for voice and gesture controls, but it isn't certain if Apple will incorporate all these components. </p><p>As Gurman states, the Apple AI pendant is looking to be the "eyes and ears" of the iPhone, so more of an accessory and less of a product that can be used by itself. </p><p>For now, there's no telling when Apple plans to release its AI pendant, or how much it will cost, as it's reportedly in the early stages of development. If its rumored smart glasses end up arriving by 2027, we could see the pendant launch soon after. And, as an accessory, fingers crossed it won't cost as much as the now-dead $699 Humane AI Pin. </p><h2 id="apple-ai-smart-glasses">Apple AI Smart Glasses</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="YXA2CnDuYdTU43djgXeLXK" name="Apple Glasses.jpg" alt="Apple Glasses render" src="https://cdn.mos.cms.futurecdn.net/YXA2CnDuYdTU43djgXeLXK.jpg" mos="" align="middle" fullscreen="" width="1200" height="675" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Martin Hajek/iDropnews))</span></figcaption></figure><p>Apple plans to catch up with <a href="https://www.tomsguide.com/computing/smart-glasses/ray-ban-meta-gen-2-review">Meta's Ray-Ban</a> 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's Android XR</a> in the smart glasses race, and it's looking like we'll finally see its first pair of AI specs by the end of 2026, or in 2027. Apparently, production on these glasses could begin in December 2026. </p><p>Apple's AI smart glasses are expected to be fitted with built-in speakers and cameras, depending on Siri for AI capabilities. These aren't likely to receive a display, like the <a href="https://www.tomsguide.com/computing/smart-glasses/meta-ray-ban-display-review">Meta Ray-Ban Display</a> specs, as these should be reserved for <a href="https://www.tomsguide.com/computing/smart-glasses/apples-long-rumored-ar-smart-glasses-finally-have-a-launch-window-and-the-display-could-change-everything">Apple's AR glasses predicted to arrive by 2028</a>.</p><p>As with its other AI wearables, the specs will connect with a user's iPhone, which will handle the processing. With its built-in cameras, speakers and microphone, the glasses will be able to take and receive phone calls, snap photos and record video. </p><p>On top of that, you'll be able to play music and use <a href="https://www.tomsguide.com/phones/iphones/how-to-use-visual-intelligence-on-iphone-to-make-calendar-events">Visual Intelligence</a> to look at objects, read text and get information about them. Plus, it's expected to have live navigation and translation. </p><p>We're expected high-resolution cameras in the Apple AI smart glasses for pictures and video, along with one dedicated to Visual Intelligence. As for design, as with the Ray-Ban Meta glasses, Apple is tipped to deliver a range of sizes and styles, but it's uncertain what these could be. </p><h2 id="ai-airpods-with-cameras">AI AirPods with cameras</h2><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="SQSQDv9VBws2uVma9pDcgK" name="Apple AirPods Pro 3 vs HRM" alt="Apple AirPods Pro 3 vs HRM" src="https://cdn.mos.cms.futurecdn.net/SQSQDv9VBws2uVma9pDcgK.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>According to the report, the AirPods with cameras are real, but are at an earlier level of development compared to the AI pendant. We've been hearing rumors of these for <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-with-cameras-tipped-for-2026-heres-what-they-could-do">a few years</a>, and Apple may finally be taking the plunge to launch these AI-powered earbuds. </p><p>Again, this AI wearable will come with cameras, but will be used to record information on the user's surroundings rather than capturing photos. From previous rumors, these would be IR (infrared) cameras, offering advanced gesture controls and support for Siri.</p><p>There's still a lot to learn about these AI wearables and how they could support other Apple products, but it sounds like they will take more advantage of <a href="https://www.tomsguide.com/ai/apple-intelligence-everything-to-know-about-apples-ai">Apple Intelligence </a>and Siri features. </p><p>With Apple pushing forward with its AI plans, we're now expecting to see AI-dedicated products come into the fold, and it's only a matter of time until we see if these devices are worth the wait. </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/smart-glasses/apples-long-rumored-ar-smart-glasses-finally-have-a-launch-window-and-the-display-could-change-everything">Apple’s long-rumored AR smart glasses may finally have a launch window — and the display could change everything</a></li><li><a href="https://www.tomsguide.com/computing/macbooks/i-review-laptops-for-a-living-3-things-i-want-from-the-new-cheap-macbook-at-the-apple-event">I review laptops for a living — 3 things I want from the new cheap MacBook at the Apple event</a></li><li><a href="https://www.tomsguide.com/computing/smart-glasses/ive-reviewed-all-of-metas-smart-glasses-and-this-is-the-pair-id-actually-buy">I've reviewed all of Meta's smart glasses, and this is the pair I'd actually buy</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 15 best Apple Presidents' Day deals — here's the sales that are actually worth it ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/sales-events/15-best-apple-presidents-day-deals-heres-the-deals-that-have-my-attention</link>
                                                                            <description>
                            <![CDATA[ Apple devices are crashing in price for Presidents' Day! Check out the deals I'd consider adding to my setup. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5hqhgGbnv6bXVhpbkFMQcC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/vN79NwXc3YWqHLWvM8cP23-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 13 Feb 2026 16:44:16 +0000</pubDate>                                                                                                                                <updated>Thu, 12 Mar 2026 15:34:26 +0000</updated>
                                                                                                                                            <category><![CDATA[Sales Events]]></category>
                                                                                                <author><![CDATA[ millie.daviswilliams@futurenet.com (Millie Davis-Williams) ]]></author>                    <dc:creator><![CDATA[ Millie Davis-Williams ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/WU6pa7hKuxs5ScCoqcXYWA.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Millie is a Deals Editor at Tom&#039;s Guide specializing in tech deals content. Based in London, Millie has spent a lifetime stubbornly refusing to pay full price on any possible purchase. She has years of searching for the best discounts on the latest and greatest phones, TVs and gadgets under her belt, and knows how to sort the best deals from the rest. Helping readers save on the products they want is her mission, whether it’s an Apple Watch or a new tablet.&lt;/p&gt;&lt;p&gt;Since working at Tom’s Guide, Millie has covered retail events like Prime Day, Black Friday and Cyber Monday extensively, meaning she knows the products readers are looking for and the best times of year to hit “purchase.”&lt;/p&gt;&lt;p&gt;When she’s not looking for discounts, Millie covers news and writes how-to articles about everything from phones, streaming devices, and headphones to apps and video games.&lt;/p&gt;&lt;p&gt;In her spare time, Millie enjoys reading, gaming on her Nintendo Switch and creating digital art. She’s also a fan of watching Disney movies and collecting plush (the latter having totally taken over her bedroom.)&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/vN79NwXc3YWqHLWvM8cP23-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple/ Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Compilation showing various Apple devices]]></media:description>                                                            <media:text><![CDATA[Compilation showing various Apple devices]]></media:text>
                                <media:title type="plain"><![CDATA[Compilation showing various Apple devices]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/vN79NwXc3YWqHLWvM8cP23-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>It’s the first big retail holiday of the year! So if you’ve been craving an upgrade, there are lots of Apple Presidents’ Day deals up for grabs. Sure, some of these items were cheaper on Black Friday — but I don’t expect those prices to appear again until the end of the year. So, if you don’t want to wait, these are the deals I’d pick up this February.</p><p>For starters, I’d recommend getting the Apple Watch 11. I think it’s the <a href="https://www.tomsguide.com/wellness/smartwatches/best-smartwatch">best smartwatch</a> for most people and it’s on sale for its lowest price ever. Or, if you want pro power on the move, I steer you towards the 11-inch iPad Pro M5 for $100 off — also its lowest price ever. </p><p>Plus, it looks like Amazon is trying to clear out Gen 1 AirTag stock to make way for the new second-generation model: you can get a 4-pack of 1st Gen AirTags for just $64 ($34 off.) Both the 1st and 2nd Gen AirTags do a great job of tracking your important stuff, so I’d definitely recommend grabbing a pack while they’re on sale.</p><p>Check out all my favorite Presidents’ Day Apple deals below!</p>        <div class="featured_product_block featured_block_hero" data-id="b9b7fd83-d451-4e59-b8fd-ce882b58dc43">            <a href="https://www.amazon.com/Apple-EarPods-Headphones-Lightning-Connector/dp/B0D7FVQ1ZB/" data-model-name="Apple EarPods Headphones With Lightning Connector" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/iV8wYgToN7939pPfd2othm.jpg" alt="Apple, Apple EarPods Headphones With Lightning Connector"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple EarPods Headphones With Lightning Connector</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="16bece93-3d60-4994-9659-ff0e4f95b5c6">            <a href="https://www.amazon.com/Apple-iPhone-FineWoven-Wallet-MagSafe/dp/B0FQG94LQK" data-model-name="Apple iPhone Finewoven Wallet With Magsafe ​​​​​​​" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/acP6hjaMKkz969bJSHd947.jpg" alt="Apple, Apple iPhone Finewoven Wallet With Magsafe ​​​​​​​"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPhone Finewoven Wallet With Magsafe ​​​​​​​</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="bff99b78-53a3-46c1-a6b3-097bd9dd7e42">            <a href="https://www.amazon.com/Apple-Luggage-Backpack-one-tap-Bluetooth/dp/B0D54JZTHY" data-model-name="Apple Airtag (1st Generation) - 4 Pack" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/3nGAkjWPxhVG5i4y96Agpd.jpg" alt="Apple, Apple Airtag (1st Generation) - 4 Pack"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airtag (1st Generation) - 4 Pack</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="edeaa27a-b327-4b26-8783-d4f81caa9b02">            <a href="https://www.amazon.com/Apple-iPhone-Air-MagSafe-Battery/dp/B0FQFH9BST" data-model-name="Apple iPhone Air Magsafe Battery ​​​​​​​" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/qw7WotkAT8crbCqJceQX63.jpg" alt="Apple, Apple iPhone Air Magsafe Battery ​​​​​​​"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPhone Air Magsafe Battery ​​​​​​​</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="1f6ffb56-44d7-4306-9112-8b562bc87b4a">            <a href="https://www.amazon.com/Apple-Pencil-Pro-Pixel-Perfect-Industry-Leading/dp/B0D3J71RM7" data-model-name="Apple Pencil Pro" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/75WFnQ3pRNLFEw84oP2rnn.jpg" alt="Apple, Apple Pencil Pro"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Pencil Pro</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="a1e3f4f2-e877-4898-a15e-944b6c27b4bf">            <a href="https://www.amazon.com/Apple-Bluetooth-Headphones-Personalized-Effortless/dp/B0DGHMNQ5Z/" data-model-name="Apple Airpods 4" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/2pqyB7oqGxi3Qk6nBFCxYh.jpg" alt="Apple, Apple Airpods 4"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airpods 4</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="635b27c9-4769-4928-9de4-5dd27573ebaa">            <a href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" data-model-name="Apple AirPods Pro 3" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/xNPVCpD2ZegU8ohPycQUu3.jpg" alt="Apple, Apple AirPods Pro 3"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple AirPods Pro 3</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="ed1f080e-43d7-4756-820a-a6916182c5c8">            <a href="https://www.amazon.com/Apple-Smartwatch-Starlight-Aluminum-Always/dp/B0FQFNRH72" data-model-name="Apple Watch SE 3 (GPS/40mm)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/mXWkoSEB95pQYqzeV5rMk5.jpg" alt="Apple, Apple Watch SE 3 (GPS/40mm)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch SE 3 (GPS/40mm)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="97b226ae-8d14-46c4-9247-d36d88e9e8a1">            <a href="https://www.amazon.com/Apple-Watch-Smartwatch-Aluminum-Always/dp/B0FQF9ZX7P" data-model-name="Apple Watch Series 11 (GPS/42mm)" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/QsXjZ5asHNU8VHVjzTW8qf.jpg" alt="Apple, Apple Watch Series 11 (GPS/42mm)"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Watch Series 11 (GPS/42mm)</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="7389cccb-3756-4128-9cfc-f356dfb80b5e">            <a href="https://www.amazon.com/Apple-iPad-11-inch-Display-All-Day/dp/B0DZ75TN5F" data-model-name="Apple iPad 11-Inch: 128GB, Wi-Fi" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/3mpiq4Vk2UfBRVhV6PpZWk.jpg" alt="Apple, Apple iPad 11-Inch: 128GB, Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPad 11-Inch: 128GB, Wi-Fi</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="d0a93000-845f-43d8-8263-5078f5224c0b">            <a href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJKT2X9" data-model-name="Apple Airpods Max" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/Jqn7w6xXCScwAVVNpktYy7.jpg" alt="Apple, Apple Airpods Max"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Airpods Max</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="3e78c1f1-6a5d-4bae-a181-12c8a9c2b9e3">            <a href="https://www.amazon.com/Apple-11-inch-Intelligence-Display-All-Day/dp/B0DZ73DTVT" data-model-name="Apple iPad Air 11-Inch (M3): 128GB, Wi-Fi" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/aMVYmqm5gX76dBJMj7wey9.jpg" alt="Apple, Apple iPad Air 11-Inch (M3): 128GB, Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPad Air 11-Inch (M3): 128GB, Wi-Fi</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c0b1131f-73a3-4251-a62c-33cf435d1a43">            <a href="https://www.amazon.com/Apple-2024-Desktop-Computer-10%E2%80%91core/dp/B0DLBTPDCS" data-model-name="Apple Mac Mini (M4): 16GB, 256GB SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/XrBwHV7oeTVtxd7Kx3GKnB.jpg" alt="Apple, Apple Mac Mini (M4): 16GB, 256GB SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple Mac Mini (M4): 16GB, 256GB SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="510f091f-969a-4960-bd83-aa3a876b29ad">            <a href="https://www.amazon.com/Apple-iPad-Pro-11-inch-Landscape/dp/B0FWCXJVHN" data-model-name="Apple iPad Pro 11-Inch (M5): 256GB, Wi-Fi" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/5zP5zR7d7EgknhVJiQJbqg.jpg" alt="Apple, Apple iPad Pro 11-Inch (M5): 256GB, Wi-Fi"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iPad Pro 11-Inch (M5): 256GB, Wi-Fi</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>        <div class="featured_product_block featured_block_hero" data-id="c7ae8ee5-1621-4845-908b-ccd4d86f3ef1">            <a href="https://www.amazon.com/Apple-2024-Desktop-Computer-8-core/dp/B0DL75531G" data-model-name="Apple iMac All-In-One (M4): 16GB, 256GB SSD" data-model-brand="" ><div class='product-image-widthsetter'><p class='vanilla-image-block' data-bordeaux-image-check style='padding-top:133.93%';><img style="width: 100%" class="featured_image" src="https://cdn.mos.cms.futurecdn.net/g24KcWpKMhz7zsf6oVMEPj.jpg" alt="Apple, Apple iMac All-In-One (M4): 16GB, 256GB SSD"></p></div></a>            <div class="featured_product_details_wrapper">                <div class="featured_product_title_wrapper">                                        <div class='featured__brand'>Apple</div>                                        <div class="featured__title">Apple iMac All-In-One (M4): 16GB, 256GB SSD</div>                                    </div>                <div class="subtitle__description">                                                            <p></p>                </div>                            </div>        </div>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ 3 hidden AirPods features that instantly boost sound and comfort  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/3-genius-airpods-tips-that-boost-sound-quality-and-improve-fit</link>
                                                                            <description>
                            <![CDATA[ Your AirPods have 3 features that boost sound and fit, here's how to use them. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">suQo5ueJqbf8tkZE86h4zV</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 29 Jan 2026 10:15:00 +0000</pubDate>                                                                                                                                <updated>Thu, 29 Jan 2026 19:11:13 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/sUwQW8yCGXFHeksAFjqSxZ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>AirPods work great straight out of the box, but most people never discover the features that can make them sound significantly better and fit more comfortably. Apple builds audio enhancement tools and fit customization options into iOS, but they're buried in various settings menus and can be easy to miss. </p><p>These features can boost sounds, create immersive 3D audio, and help you find the perfect ear tip size for <a href="https://www.tomsguide.com/audio/airpods/ive-been-living-with-the-airpods-pro-3-for-three-months-what-i-like-whats-changed-and-whats-bad">AirPods Pro</a>. Once you know where to find them and how to use them, you can improve your listening experience. </p><p>Here are three ways to make your AirPods sound better and fit more comfortably.</p><section class="howto-block">                    <h3>1. Boost sound with Headphone Accommodations</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/antMnwrFJK7yS6Ya9wYHsN.jpg"                                        alt="The AirPods Pro being held in hand"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/antMnwrFJK7yS6Ya9wYHsN.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Headphone Accommodations enhances audio from your AirPods by boosting softer sounds and adjusting certain frequencies. This makes music, podcasts, and calls clearer and more detailed. </p><p><strong>Go to Settings, then Accessibility, then Audio & Visual, and enable Headphone Accommodations</strong>. <strong>Tap Play Sample</strong> to start playing music, which lets you tune the audio while you listen.</p><p>You can choose from three tuning options: <strong>Balanced Tone </strong>boosts a range of frequencies for overall clarity, <strong>Vocal Range</strong> emphasizes middle frequencies where voices sit, and <strong>Brightness </strong>highlights higher frequencies for crisper sound. You can also boost softer sounds slightly, moderately, or strongly to bring out quiet details in your audio.</p><p>Test each setting with music or podcasts you listen to regularly. The right combination depends on your hearing and personal preference, so experiment until you find what sounds best to you.</p></p>                </section><section class="howto-block">                    <h3>2. Turn on Spatial Audio for 3D surround sound </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/WhKDTmzHz3aFoaoBA6hEKi.jpg"                                        alt="AirPods Pro 2 in hand in front of iPhone "                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/WhKDTmzHz3aFoaoBA6hEKi.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p>Spatial Audio creates a three-dimensional quality to your music, making it seem like sound is coming from all around you instead of directly from your ears. This feature works with any generation AirPods Pro and with AirPods 3 and 4.</p><p><strong>Go to Settings, tap Bluetooth, and select the info icon (i) next to your AirPod</strong>s. Under the Spatial Audio section, <strong>tap See & Hear How It Works </strong>to compare Spatial Audio with regular stereo playback so you can hear the difference.</p><p>To enable Spatial Audio while listening to music, <strong>open Control Center</strong> by swiping down from the top right corner of your screen<strong>. Press and hold the audio control for your AirPods, then tap Spatialize Stereo</strong>.</p><p>Spatial Audio offers two modes: <strong>Fixed mode </strong>keeps the sound anchored to your device, so audio stays in place as you move your head. <strong>Head Tracked </strong>mode makes sound move with your head position, creating a more immersive experience where audio feels like it's coming from specific locations in space. </p><p>Not all content supports Spatial Audio, but when it does, the difference is noticeable. Apple Music, Apple TV+, and many streaming services offer Spatial Audio. </p></p>                </section><section class="howto-block">                    <h3>3. Find your perfect fit with the Ear Tip Test </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/64gEdWhZZGfxQuP6DPjefj.jpg"                                        alt="AirPods 3 in ear"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/64gEdWhZZGfxQuP6DPjefj.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>AirPods Pro come with three ear tip sizes: small, medium, and large, to fit different ear canal sizes. Getting the right fit matters because poorly fitted tips let sound leak out, reduce bass response, and make the earbuds more likely to fall out. The Ear Tip Fit Test helps you find which size creates the best seal.</p><p>To change ear tips, <strong>pull firmly on the current tips until they detach from the AirPods</strong>. Next,<strong> align the new tips so the center white circle on the tip matches the center black circle </strong>on the earbud base, then <strong>push until they click into place</strong>.</p><p>Once you've attached tips and inserted the AirPods into your ears, <strong>go to Settings, tap Bluetooth, and select the info icon </strong>next to your AirPods Pro. In the Fit & Comfort section, <strong>tap Test Acoustic Seal, then Continue, then Play</strong>. The test plays a short music clip and analyzes whether the tips create a proper seal.</p><p>The test results will tell you if each earbud has a good seal. If one or both don't, <strong>try adjusting the position of the AirPods in your ears or switch to a different tip size</strong>. Repeat the test until both earbuds show a good seal.</p><p>If you've never taken the fit test, it's worth doing — many people are using the wrong size tips without realizing it.</p></p>                </section><div style="min-height: 250px;">                                <div class="kwizly-quiz kwizly-eGVpwX"></div>                            </div>                            <script src="https://kwizly.com/embed/eGVpwX.js" async></script><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide </span></h3><ul><li><a href="https://www.tomsguide.com/audio/airpods/your-airpods-have-a-hidden-camera-feature-heres-how-to-use-it">I had no idea my AirPods could do this — and it's perfect for group photos</a></li><li><a href="https://www.tomsguide.com/audio/airpods/i-just-discovered-these-5-airpods-features-and-theyre-game-changers">5 game-changing AirPods features you'll want to use</a></li><li><a href="https://www.tomsguide.com/audio/airpods/this-hidden-iphone-feature-lets-you-connect-two-pairs-of-wireless-headphones-at-once-for-shared-listening-but-theres-a-catch">You can use Audio Sharing to connect two AirPods to the same iPhone </a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Apple tipped to release ‘higher-end’ AirPods Pro this year — advanced gesture controls inbound with IR camera  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/apple-tipped-to-release-higher-end-airpods-pro-this-year-advanced-gesture-controls-inbound</link>
                                                                            <description>
                            <![CDATA[ This new model won't replace the AirPods Pro 3; instead, it will sit alongside them with higher-end features. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">xJRUbFz65DEwHUwYcQ9kKL</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/invm3N5jpHRfW4Ciaig2MS-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Jan 2026 20:50:06 +0000</pubDate>                                                                                                                                <updated>Wed, 21 Jan 2026 22:00:29 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ dave.leclair@futurenet.com (Dave LeClair) ]]></author>                    <dc:creator><![CDATA[ Dave LeClair ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/fyx7qYdxPMTNBhdnMfNmaB.png ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Dave LeClair is the Senior News Editor for Tom&#039;s Guide, keeping his finger on the pulse of all things technology. He loves taking the complicated happenings in the tech world and explaining why they matter. Whether Apple is announcing the next big thing in the mobile space or a small startup advancing generative AI, Dave will apply his experience to help you figure out what&#039;s happening and why it&#039;s relevant to your life.&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Before Tom&#039;s Guide, Dave worked for publications like PCMag, Pocket-lint, MUO, How-To Geek, Digital Trends, and others. He started writing about technology professionally for MUO in 2011 and hasn&#039;t looked back since. In addition to news, you can find reviews, how-to pieces, shopping guides, and many other types of content with Dave&#039;s name attached.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/invm3N5jpHRfW4Ciaig2MS-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/invm3N5jpHRfW4Ciaig2MS-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In a surprise to no one, Apple is working on a new pair of AirPods Pro earbuds. However, the unexpected news is that the company plans to launch the new models in 2026. They won't replace the current <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a>, which are easily among the <a href="https://www.tomsguide.com/audio/earbuds/ive-reviewed-loads-of-earbuds-this-year-so-here-are-my-budget-mid-range-and-premium-recommendations">best earbuds</a>, but will instead sit alongside them as an ultra-premium model.</p><p>Of course, if Apple wants to justify a higher price tag for a pair of AirPods Pro, it needs to add new features, as no one is going to pay extra out of the kindness of their hearts. Based on a report from analyst <a href="https://x.com/mingchikuo/status/1964533958722670804" target="_blank">Ming-Chi Kuo</a> and a <a href="https://www.tomsguide.com/audio/airpods/airpods-pro-3-rumors-indicate-a-new-model-with-cameras-but-like-why">leak from Instant Digital</a>, it sounds like Apple has some big plans, including advanced gesture controls and the powerful <a href="https://www.tomsguide.com/audio/airpods/airpods-pro-4-and-airpods-5-tipped-for-a-big-chip-upgrade-heres-why">H3 chip</a>. </p><h2 id="what-to-expect-from-the-expensive-airpods-pro-3-model">What to expect from the expensive AirPods Pro 3 model</h2><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.25%;"><img id="FXwaELmLBsumL8F3fwWVpf" name="airpods.jpg" alt="A photo of a woman putting an Apple AirPod into her ear" src="https://cdn.mos.cms.futurecdn.net/FXwaELmLBsumL8F3fwWVpf.jpg" mos="" align="middle" fullscreen="" width="6000" height="3375" 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>The biggest hardware upgrade we've heard of is coming to the new, pricier version of the AirPods Pro: a gesture-reading infrared camera. With this, users will be able to control their music, answer calls and do anything else they'd expect to do with the earbuds without pressing any physical buttons or touch areas.</p><p>In fact, Instant Digital suggested that these cameras could prompt Apple to remove the fancy new model's pressure sensors and offer gesture controls only. That would be an interesting move from Apple, as people have grown comfortable with swiping to control music and calls.</p><p>The H3 chip is also being rumored for the new AirPods. According to <a href="https://www.bloomberg.com/news/newsletters/2025-10-12/inside-apple-s-glasses-pivot-when-apple-is-launching-m5-macbook-pro-ipad-pro" target="_blank">Bloomberg's Mark Gurman</a>, who has a very reliable track record of reporting on all things Apple, the next-generation audio chip is in development. It could be for a future model, such as the AirPods 5 or an upgraded Max, but that remains to be seen.</p><p>Either way, Apple has a large price gap between the AirPods Pro 3 and AirPods Max, with the headphones selling for $249 and $549, respectively. If it were to drop the advanced AirPods Pro 3 this year in the $349-$399 range, it would fill the space nicely.</p><p>If these do come to fruition, it'll probably be a few months before we see anything official, as Apple typically drops new AirPods in the back half of the year.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/5-biggest-wearable-tech-predictions-for-2026-from-new-fitbits-to-the-ever-elusive-apple-ring">5 biggest wearable tech predictions for 2026 — from new Fitbits to the ever-elusive Apple Ring</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/garmin-vs-apple-watch-which-smartwatch-is-right-for-you">Garmin vs Apple — who makes the better smartwatch?</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/i-prefer-the-apple-watch-se-3-to-apples-other-models-heres-5-reasons-why">5 reasons why the Apple Watch SE 3 is the smartwatch I recommend most</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ You can use Audio Sharing to connect two AirPods to the same iPhone — here's how to do it ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/this-hidden-iphone-feature-lets-you-connect-two-pairs-of-wireless-headphones-at-once-for-shared-listening-but-theres-a-catch</link>
                                                                            <description>
                            <![CDATA[ Learn how to use Audio Sharing to connect two pairs of AirPods or Beats to your iPhone at once. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">GyT8bya7waqVnYJavb6J4</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 21 Jan 2026 10:30:00 +0000</pubDate>                                                                                                                                <updated>Wed, 21 Jan 2026 22:03:02 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/sUwQW8yCGXFHeksAFjqSxZ.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>If you've ever wanted to watch a movie with someone on a plane or share a song with a friend, you've probably ended up passing one AirPod back and forth. It's awkward, uncomfortable, and you both get tangled in the same wire or deal with one ear going silent.</p><p>Your iPhone actually has a built-in solution called Audio Sharing that lets two people listen through separate pairs of headphones at the same time. The catch is it only works with Apple and Beats headphones, not just any old wireless pair. Here's how to set it up this feature on your iPhone. </p><section class="howto-block">                    <h3> 1. Check device compatibility</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/emuZBBdxu9WWEJBsfuihE6.jpg"                                        alt="Beats Studio Buds vs. AirPods Pro"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/emuZBBdxu9WWEJBsfuihE6.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Before you can share audio, make sure your iPhone and headphones support the feature. The good news is that most recent devices do. <strong>You'll need an iPhone 8 or later </strong>and as long as you're running a <strong>relatively recent version of iOS,</strong> you should be fine.</p><p>The headphone compatibility is more restrictive. <strong>Audio Sharing only works with Apple and Beats products</strong>, including the <a href="https://www.tomsguide.com/buying-guide/best-airpods">best AirPods </a>models, AirPods Pro, and AirPods Max. </p><p>On the Beats side, it supports Beats Fit Pro, Beats Flex, Beats Solo Pro, Beats Solo3 Wireless, Beats Studio3 Wireless, BeatsX, Powerbeats, Powerbeats Pro, and Powerbeats3 Wireless.</p></p>                </section><section class="howto-block">                    <h3>2. Connect your AirPods and start playing audio</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/64gEdWhZZGfxQuP6DPjefj.jpg"                                        alt="AirPods 3 in ear"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/64gEdWhZZGfxQuP6DPjefj.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p><strong>Put your AirPods (or Beats) in your ears</strong> <strong>and make sure they're connected to your iPhone</strong>. Next, <strong>Open any app that plays audio </strong>— Music, Spotify, YouTube, Netflix, or anything else — and start playing something.</p><p>You'll see the audio playback controls appear either in the app you're using or in Control Center. This is where you'll access Audio Sharing.</p></p>                </section><section class="howto-block">                    <h3>3. Access Audio Sharing from playback controls</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/AfpNLN9gCw8bQsGWjQyLaf.jpg"                                        alt="The AirPods 4 connected to an iPhone 12"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/AfpNLN9gCw8bQsGWjQyLaf.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>There are two ways to access Audio Sharing. If you have the Music app open with playback controls visible, <strong>tap your AirPods name at the bottom of the screen</strong>.</p><p>Alternatively,<strong> swipe down from the top-right corner to open Control Center</strong>. In the audio playback controls panel, tap the icon in the top-right corner representing your connected AirPods.</p><p>Once you tap either location, you'll see playback options. <strong>Tap Share Audio </strong>below the playback controls.</p></p>                </section><section class="howto-block">                    <h3>4. Connect the second pair of AirPods or Beats</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/sQUVZpwVwoySwbiuvtWEE4.jpg"                                        alt="The Beats Studio Buds taken out of the charging case"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/sQUVZpwVwoySwbiuvtWEE4.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Beats)</div></figure>                    <p><p><strong>A prompt will appear on your screen</strong> offering to Share Audio. Now have your friend <strong>bring their AirPods or Beats headphones (still in the charging case) close to your iPhone </strong>and <strong>open the lid</strong>.</p><p>When your iPhone detects the second pair, <strong>tap Share Audio on the prompt</strong>. If requested, <strong>hold the button on the back of the charging case</strong> to complete the connection.</p><p>Once connected, both pairs of headphones will play the same audio simultaneously. The iPhone or iPad controls the overall volume, but each person can also adjust their own volume separately using their headphone controls.</p></p>                </section><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/audio/airpods/your-airpods-have-a-hidden-camera-feature-heres-how-to-use-it">I had no idea my AirPods could do this — and it's perfect for group photos</a></li><li><a href="https://www.tomsguide.com/audio/airpods/i-just-discovered-these-5-airpods-features-and-theyre-game-changers">5 game-changing AirPods features you'll want to use</a></li><li><a href="https://www.tomsguide.com/audio/your-earbuds-are-disgusting-heres-the-right-way-to-clean-them">Your earbuds are disgusting — here's how to clean them</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I had no idea my AirPods could do this — and it's perfect for group photos ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/your-airpods-have-a-hidden-camera-feature-heres-how-to-use-it</link>
                                                                            <description>
                            <![CDATA[ Learn how to enable and use iOS 26's Camera Remote feature to take iPhone photos and videos by pressing your AirPods instead of the shutter button. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">nZkg8naGCbeR6ZZbsRgmGf</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 15 Jan 2026 05:15:00 +0000</pubDate>                                                                                                                                <updated>Thu, 15 Jan 2026 19:50:21 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/XR7uugHJo9GDpoV7ZN22Ae.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Taking group selfies or photos where you want to be in the frame usually means awkwardly stretching your arm to reach the shutter button while trying to keep your hand out of the shot. Apple's <a href="https://www.tomsguide.com/phones/iphones/ios-26-here-are-my-13-favorite-hidden-features-that-will-make-your-life-easier">iOS 26</a> introduced a feature that solves this problem: Camera Remote for AirPods. </p><p>You can set up your iPhone at the perfect angle, step back into frame, and trigger the camera with a simple press. However, it only works with AirPods that have an H2 chip, which includes <a href="https://www.tomsguide.com/reviews/airpods-pro-2-review">AirPods Pro 2</a>, <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a>, and <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a>. Here's how to enable Camera Remote and use your AirPods to take photos.</p><section class="howto-block">                    <h3>1. Connect your AirPods to your iPhone</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/mHrXZUxPtzzkFNX8FXhYZQ.jpg"                                        alt="Woman in a cap wearing the Apple AirPods Pro 3 outside in the sunshine"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/mHrXZUxPtzzkFNX8FXhYZQ.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p><strong>Put your AirPods in your ears</strong>. If they're already paired to your iPhone, they should connect automatically. You'll see the AirPods icon appear in your iPhone's status bar when they're connected. </p><p>As mentioned. make sure you're using one the compatible models: AirPods Pro 2, AirPods Pro 3, or AirPods 4, as these are the only models with the H2 chip required for Camera Remote.</p></p>                </section><section class="howto-block">                    <h3>Open AirPods settings</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/ip9yDmqagB93nKSUR97KC6.jpg"                                        alt="AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/ip9yDmqagB93nKSUR97KC6.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple, Tom's Guide)</div></figure>                    <p><p><strong>Open the Settings app on your iPhone</strong>. Scroll down until you see your AirPods listed in the settings menu. The listing will show your AirPods' custom name if you've renamed them, or the default name like "AirPods Pro." </p><p><strong>Tap on your AirPods </strong>to open their settings. </p></p>                </section><section class="howto-block">                    <h3>3. Turn on Camera Remote</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/LjC9y88BGNmmGe9sc3hx76.jpg"                                        alt="AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/LjC9y88BGNmmGe9sc3hx76.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Apple, Tom's Guide)</div></figure>                    <p><p><strong>Find Camera Remote</strong> under the Camera Control section and <strong>tap it</strong>. Next, <strong>choose either Press Once or Press and Hold</strong> to determine how you'll trigger the camera. </p><p>Press Once takes a photo with a single press of the AirPod stem, while Press and Hold requires holding briefly. Pick whichever feels more comfortable.</p></p>                </section><section class="howto-block">                    <h3>4. Take photos with your AirPods</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/EF83KhnbdoXXHL2a2aAfu.jpg"                                        alt="iPhone Air shown in hand"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/EF83KhnbdoXXHL2a2aAfu.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p><strong>Open the Camera app and position your iPhone where you want it </strong>— on a surface, propped up, or held by someone else. <strong>Make sure at least one AirPod is in your ear</strong>. Simply <strong>press the AirPod</strong> stem using your chosen method. </p></p>                </section><section class="howto-block">                    <h3>5. Record videos with your AirPods</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/LmGBb7Vayduba4ghG9wSGV.jpg"                                        alt="iPhone 17 Pro Max shown in hand"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/LmGBb7Vayduba4ghG9wSGV.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>You can also take videos using Camera Remote. <strong>Switch the Camera app to Video mode </strong>(or Cinematic, Slo-Mo, etc.). <strong>Press your AirPod stem to start recording </strong>immediately. </p><p>To stop recording, you just <strong>press the stem again</strong>. </p></p>                </section><section class="howto-block">                    <h3>What to know about Camera Remote</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza.jpg"                                        alt="A pair of Apple AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>The three-second countdown for photos is automatically enabled and can't be disabled. Y<strong>ou can extend the countdown by tapping the grid icon in the top right of the Camera app, selecting Timer, and choosing 5 or 10 seconds</strong>. </p><p>Camera Remote works with all camera modes including Portrait, Panorama, and Time-Lapse, making it a versatile tool for different types of photography.</p></p>                </section><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/audio/airpods/i-just-discovered-these-5-airpods-features-and-theyre-game-changers">5 game-changing AirPods features you'll want to use</a></li><li><a href="https://www.tomsguide.com/audio/airpods/just-bought-the-airpods-4-heres-five-things-you-need-to-do-first">Just bought the AirPods 4? Here's five things you need to do first</a></li><li><a href="https://www.tomsguide.com/audio/your-earbuds-are-disgusting-heres-the-right-way-to-clean-them">Your earbuds are disgusting — here's how to clean them</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Hidden AirPods features — 5 things you didn't know your Apple earbuds could do ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/hidden-airpods-features-5-things-you-didnt-know-your-apple-earbuds-could-do</link>
                                                                            <description>
                            <![CDATA[ Your AirPods can do more than you ever thought possible. Let's break it down. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">4jJKo9NTGp8ZrYEJ9RHnMc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 14 Jan 2026 07:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Apple's AirPods are some of the most popular earbuds and headphones that you can buy today. It's no great surprise why, considering how well they work with iPhone devices and the sheer number of features available out of the box. But; did you know that there's loads about your AirPods that you might not know about?</p><p>There are loads of different hidden features built into the AirPods line, from funky extras that let you take photos with your earbuds to head gestures that can answer and reject calls. Whether you own a pair of <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a>, <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> or <a href="https://www.tomsguide.com/reviews/apple-airpods-max">AirPods Max</a>, here are the hidden features you didn't know were in your AirPods.</p><h2 id="1-take-a-picture">1. Take a picture</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1925px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="HWrqwGS4X7MUWnJjSViKhh" name="IMG_6588" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/HWrqwGS4X7MUWnJjSViKhh.jpg" mos="" align="middle" fullscreen="" width="1925" height="1083" 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'll bet you didn't know you could use your AirPods as a remote control for the camera on your iPhone! It's super easy as well — you just need to activate it in the settings menu.</p><p>Head to the settings menu, and find your AirPods. Scroll down to the camera control section, and choose the option that suits you. You can choose a single or long tap to activate the shutter in the camera app.</p><p>From there, open the camera app, and try your new shortcut. You'll get a countdown on screen, and then your phone takes a picture. Perfect for group photos!</p><p><strong>Airpods this works with:</strong></p><ul><li>AirPods Pro 3</li><li>AirPods Pro 2</li><li>AirPods 4</li></ul><h2 id="2-nod-to-accept-a-call">2. Nod to accept a call</h2><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:75.29%;"><img id="jYoiC4bzoyJveefN5PjXq7" name="AirPods 4 - Head Gestures" alt="AirPods 4" src="https://cdn.mos.cms.futurecdn.net/jYoiC4bzoyJveefN5PjXq7.jpg" mos="" align="middle" fullscreen="" width="4080" height="3072" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future/ Alex Bracetti)</span></figcaption></figure><p>Ever found your hands full, only to need to answer a call on your earpuds? Don't worry, Apple thought of a solution. There's a setting that lets you nod your head to accept a call and shake your head to decline it. It's found hidden away in the settings menu.</p><p>Open the menu, and find your AirPods settings. Scroll down until you find head gestures, and toggle the option on. Now, you can accept and decline calls with a nod or a shake of your head.</p><p><strong>AirPods this works with:</strong></p><ul><li>AirPods Pro 3</li><li>AirPods Pro 2</li><li>AirPods 4</li><li>AirPods 3</li></ul><h2 id="3-make-sure-your-airpods-fit-correctly">3. Make sure your AirPods fit correctly</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5705px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hfk4whZfbRUQkweEGA87QS" name="AirPods Pro 3" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Hfk4whZfbRUQkweEGA87QS.jpg" mos="" align="middle" fullscreen="" width="5705" height="3209" 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>Finding the right fit with any pair of earbuds can be tricky. Which ear tips should you use? How do they slip in properly? Apple has made it easier to make sure that your earbuds are fitting properly with fit test.</p><p>Head to the settings menu, and select your AirPods. Navigate to Ear Tip Fit Test, and then run the test. Adjust their fit as needed with a new set of tips — remember, you might need one side to be bigger than the other.</p><p>Once it's all done, your AirPods will fit better, they'll even likely sound slightly better. and, as an added bonus, the ANC will block more noise. Make sure you run this test! </p><p><strong>AirPods this works with:</strong></p><ul><li>AirPods Pro 3 (it's called "Acoustic Seal Test")</li><li>AirPods Pro 2</li></ul><h2 id="4-chill-out-with-relaxing-sounds">4. Chill out with relaxing sounds</h2><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="Q7LZEeQj46Hd3tBS5MiM2b" name="Airpods_pro 3.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b.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>Did you know that your AirPods can help you relax? There are built in sounds that can calm you down. They're called "Background Sounds," and there's a series of different options to choose from. Six, in fact.</p><p>Head to the settings menu, and go to the accessibility section. Then you'll choose the Audio/Visual menu, and navigate to the Background Sounds option. From there, choose your sound. Now you can sleep peacefully without being woken up by your snoring partner. Or the hamster wheel. Or, well, whatever it is that keeps you up. </p><p><strong>AirPods this works with:</strong></p><ul><li>AirPods Pro 3</li><li>Airpods Pro 2</li><li>AirPods Pro</li><li>AirPods 4</li><li>AirPods 3</li><li>AirPods 2</li><li>AirPods Max</li></ul><h2 id="5-watch-your-movies-without-disturbing-your-family">5. Watch your movies without disturbing your family</h2><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="mm9FfKQh2P2LAm9UijXt4b" name="Airpods_pro 6.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/mm9FfKQh2P2LAm9UijXt4b.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've got an Apple TV, you can connect your Airpods and listen to the audio without waking anyone else up at more... interesting hours. It's super easy, and if your AirPods support Spatial Audio, then you'll get surround with some of your content as well.</p><p>To see if your AirPods are connected to your Apple TV, press the power button to bring up control center. Check the audio menu here and find your AirPods. Now you can watch all your movies and TV with your AirPods! Simple, and very useful.</p><p><strong>AirPods this works with:</strong></p><ul><li>AirPods Pro 3</li><li>AirPods Pro 2</li><li>AirPods Pro</li><li>AirPods 4</li><li>AirPods 3</li><li>AirPods 2</li><li>AirPods</li><li>AirPods Max</li></ul><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-18-countdown-starts-now-5-rumored-upgrades-apple-could-be-giving-its-pro-models">iPhone 18 Pro rumors: 2nm A20 Pro chip, variable aperture camera and under-display Face ID (plus new colors)</a></li><li><a href="https://www.tomsguide.com/entertainment/movies/7-top-new-movies-you-can-stream-this-week-on-netflix-hulu-paramount-and-more-jan-13-19">7 top new movies you can stream this week on Netflix, Hulu, Paramount+ and more (Jan. 13-19)</a></li><li><a href="https://www.tomsguide.com/home/home-appliances/this-vinegar-steam-trick-will-rid-your-oven-of-grease-and-grime-heres-how-to-do-it">This vinegar steam trick will rid your oven of grease and grime — here's how to do it</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ How to connect AirPods to Apple TV ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/how-to-connect-airpods-to-apple-tv</link>
                                                                            <description>
                            <![CDATA[ Your AirPods connect seamlessly with your Apple TV — I bet you didn't know! ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">pomdNnpVJ8EkNmwxrbhJTE</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/UZHauH88eb3UsqUYGHLBFK-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 12 Jan 2026 09:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/UZHauH88eb3UsqUYGHLBFK-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[airpods pro 3 Apple TV]]></media:description>                                                            <media:text><![CDATA[airpods pro 3 Apple TV]]></media:text>
                                <media:title type="plain"><![CDATA[airpods pro 3 Apple TV]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/UZHauH88eb3UsqUYGHLBFK-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>One of my favorite ways of watching movies and TV shows with my <a href="https://www.tomsguide.com/reviews/apple-tv-4k-2022">Apple TV</a> is with a pair of AirPods. I still get all the surround benefits of Spatial Audio, but I don't disturb the rest of the house with elevated volume levels.</p><p>It's super easy to connect your AirPods to your Apple TV, as well. It's even simpler if you've got other Apple devices — you'll almost certainly be able to use them straight away. Here's how to connect your AirPods to your Apple TV.</p><h2 id="models-this-will-work-with">Models this will work with</h2><ul><li>AirPods</li><li>AirPods 2</li><li>AirPods 3</li><li>AirPods 4</li><li>AirPods Pro</li><li>Airpods Pro 2</li><li>AirPods Pro 3</li><li>AirPods Max</li></ul><h2 id="the-easy-way">The easy 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="ryFasSGzkXnmei2KeYT9ZU" name="TG_AppleTV-4k_2022.jpg" alt="The Apple TV 4K (2022), with the Siri remote propped on its right side." src="https://cdn.mos.cms.futurecdn.net/ryFasSGzkXnmei2KeYT9ZU.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: Henry T. Casey / Tom's Guide)</span></figcaption></figure><p>If you use other Apple devices with your AirPods, like an iPhone or an iPad, your AirPods are likely already connected to your Apple TV without you even realizing. It's all down to that magic Apple device connection — they're linked with your Apple ID.</p><p>To check that they're connected to your Apple TV, <strong>boot up the TV device and then open your buds</strong>. Then <strong>put them in your ears</strong>, and you should see a connection notification on screen.</p><p><strong>Go and play something on your favorite streaming service and check that the audio is coming through</strong>. Job done!</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="27G2pLXimP6vAog4vMjnza" name="Airpods_pro 10.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza.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 they don't immediately play the audio, you need to choose them as an audio output. <strong>Hit the</strong> <strong>power button</strong> on the top right of your remote, <strong>select the "audio" section, and choose your AirPods</strong> from the list.</p><p>If they're not there, then you'll have to connect them manually. Have no fear, it's actually super easy.</p><h2 id="the-harder-way">The harder 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:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="4edCPo7rt3xCPfxayFXSY" name="AirPods Max USB-C-10" alt="The AirPods Max USB-C in a photo studio" src="https://cdn.mos.cms.futurecdn.net/4edCPo7rt3xCPfxayFXSY.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>First, navigate to the <strong>settings menu</strong> on your Apple TV. From there, find the <strong>Remotes & Devices tab</strong>. Now, you'll need to find the <strong>Bluetooth </strong>tab.</p><p>Now we need to get the <strong>AirPods into pairing</strong> mode. This will depend on your AirPods.</p><p>For the <strong>AirPods 1, 2</strong> and <strong>3</strong>, and the <strong>AirPods Pro 1</strong> and <strong>Pro 2</strong>, <strong>open the case and find the</strong> <strong>pairing button</strong> on the back. <strong>Hold down the button</strong> until the status light on the front flashes white.</p><p><strong>AirPods 4</strong> (both models) and <strong>AirPods Pro 3</strong> have a touch panel instead. Open the case, and then <strong>double-tap the front of the case</strong> near the Apple TV. </p><p>Finally, for the <strong>AirPods Max</strong>,<strong> hold down the ANC button</strong> until the status light flashes white.</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="uKSSLPpfSUmKyg5PvvDumX" name="AirPods 4-1.jpg" alt="AirPods 4 on a table" src="https://cdn.mos.cms.futurecdn.net/uKSSLPpfSUmKyg5PvvDumX.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>With your AirPods now in pairing mode, you can find them in the Bluetooth connections menu of the Apple TV. <strong>Select your AirPods in the list</strong>, and you're away!</p><p>Back out of the settings menu, and then double-check that the AirPods are connected properly. Using the <strong>power button</strong> on the remote control,  find the AirPods in the audio devices section.</p><p>This is also where you can configure the Spatial Audio settings (if applicable). And with that, your AirPods are connected to your Apple TV — go forth and watch some movies and TV!</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/audio/over-ear-headphones/wired-headphones-and-reconnecting-with-your-music-the-case-for-the-headphone-jack-in-2026">Wired headphones and reconnecting with your music — the case for the headphone jack in 2026</a></li><li><a href="https://www.tomsguide.com/tvs/5-samsung-tv-settings-to-change-for-the-best-possible-picture">5 Samsung TV settings to change for the best possible picture</a></li><li><a href="https://www.tomsguide.com/wellness/workouts/you-just-need-12-minutes-to-carve-a-stronger-core-with-this-equipment-free-workout">You just need 12 minutes to carve a stronger core with this equipment-free workout</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ My AirPods Pro 3 started making a weird clicking noise on my runs, until I did this ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/my-airpods-pro-4-started-making-a-weird-clicking-noise-on-my-runs-until-i-did-this</link>
                                                                            <description>
                            <![CDATA[ My AirPods Pro 3 started clicking — here’s the simple fix that saved me having to replace them ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">YMRexw847P6t64HA5oxuJ</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/iDCenZoN4f9bSfgNaLZjDo-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 11 Jan 2026 05:15:00 +0000</pubDate>                                                                                                                                <updated>Mon, 12 Jan 2026 09:56:20 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ jane.mcguire@futurenet.com (Jane McGuire) ]]></author>                    <dc:creator><![CDATA[ Jane McGuire ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/jRrKwAuJ7QJs8x62DUk2yc.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jane McGuire is Tom&#039;s Guide&#039;s Fitness editor, which means she looks after everything fitness related — from running gear and fitness trackers to yoga mats and sports bras. An avid runner, Jane has tested and reviewed fitness products for the past five years, so knows what to look for when finding a good running watch, or a pair of shorts with pockets big enough for your smartphone, running gels, and house keys.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Jane has run four marathons — the London Marathon three times, and the Berlin Marathon once, and is still on a quest to tick off all of the marathon majors. In the meantime, she’ll be telling anyone who cares about how her love for the Nike ZoomX Invincibles — her all-time favourite running shoe, or her ‘joy plan’, where she runs for happiness, not for PR’s.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;Previous to Tom’s Guide, Jane worked for Runner’s World, where she co-hosted the Runner’s World podcast. She also presents on a YouTube channel called the Run Testers, alongside other running-mad journalists, where they review the latest shoes, kit, and tech. Her work has also appeared in Coach, Get Sweat Go, and Women’s Health.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;br&gt;&lt;/p&gt;
&lt;p&gt;When she&#039;s not pounding the pavements, you&#039;ll find Jane striding round the Surrey Hills, taking far too many photos of her puppy, Toby.&amp;nbsp;&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/iDCenZoN4f9bSfgNaLZjDo-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/iDCenZoN4f9bSfgNaLZjDo-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>In a matter of months, my <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> have become my go-to running headphones, and it’s not because they have the ability to track my heart rate. The fit and sound quality is far superior to their predecessors, and they don’t budge, even on really sweaty workouts (nice). However, over the holidays, my AirPods started making a weird clicking, mainly whenever Apple’s Workout Buddy paused my music or podcast with Active Noise Cancellation enabled, but click they did, and it drove me <em>mad</em>. </p><p>Luckily, this story has a happy ending, and a rather simple fix, so if you find your AirPods start clicking during your workouts, here’s what to try before you head to a Genius bar. </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="SQSQDv9VBws2uVma9pDcgK" name="Apple AirPods Pro 3 vs HRM" alt="Apple AirPods Pro 3 vs HRM" src="https://cdn.mos.cms.futurecdn.net/SQSQDv9VBws2uVma9pDcgK.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><h2 id="my-airpods-pro-3-started-clicking-here-s-the-simple-fix-that-saved-me-having-to-replace-them">My AirPods Pro 3 started clicking — here’s the simple fix that saved me having to replace them</h2><p>When I first googled the problem, I saw that the clicking noise can stem from firmware bugs or hardware issues, or a far simpler alternative — a buildup of dirt causing friction in the ear tip. </p><p>I often leave the case for my AirPods at home, and chuck my pods themselves in my jacket pocket when I finish a run, and after a few months of wear, I had yet to clean them. Here are the steps I took: </p><ul><li>I removed the tips of the AirPods and used a cotton bud with micellar water to remove the dust that had accumulated both in the part that sits in my ear, and the opposite side, that sits flush with the headphones themselves — there was a surprising amount hidden in the headphones.</li><li>While they were dying, I used another dry cotton swab to clean out the speakers themselves.</li><li>I allowed everything to dry, before putting the headphones back together and returning them to their charging case.</li></ul><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5235px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="xmPPToWs4zEYkwYjUHVrMS" name="AirPods Pro 3" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/xmPPToWs4zEYkwYjUHVrMS.jpg" mos="" align="middle" fullscreen="" width="5235" height="2945" 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>So far, so good in terms of the clicking noise, and a decent lesson that the simple fix is always a good place to start. </p><p>Of course, if this doesn’t work, it’s worth taking your headphones back to Apple to see if the popping or clicking sound is related to hardware, but keep your headphones clean, folks, especially if, like me, you carry them around without the case. </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/audio/airpods/i-wore-the-airpods-pro-3-to-every-workout-for-a-week-heres-my-honest-review">I wore the AirPods Pro 3 to every workout for a week — here's my honest review</a></li><li><a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review#section-airpods-pro-3-review-verdict">Apple AirPods Pro 3 review: The best AirPods yet</a></li><li><a href="https://www.tomsguide.com/audio/airpods/i-compared-the-apple-airpods-pro-3s-heart-rate-readings-vs-a-chest-strap-and-the-results-shocked-me">I compared the Apple AirPods Pro 3’s heart rate readings vs a chest strap — and the results shocked me</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ AirPods Pro 3 rumors indicate a new model with cameras — but, like, why? ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/airpods-pro-3-rumors-indicate-a-new-model-with-cameras-but-like-why</link>
                                                                            <description>
                            <![CDATA[ There's a new pair of AirPods Pro 3 on the way, potentially loaded with IR cameras for... reasons. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">q9v3YTvj25vZpFYGvFYDy7</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/mm9FfKQh2P2LAm9UijXt4b-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 05 Jan 2026 10:40:35 +0000</pubDate>                                                                                                                                <updated>Mon, 05 Jan 2026 11:43:54 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/mm9FfKQh2P2LAm9UijXt4b-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/mm9FfKQh2P2LAm9UijXt4b-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> launched to a great deal of fanfare last year, landing with pinpoint accuracy onto our list of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best wireless earbuds</a>. They've got better sound, a (supposedly) improved fit, and a whole load more battery life. Apparently, though, we could see a new version at some point — <a href="https://9to5mac.com/2026/01/02/another-airpods-pro-3-model-is-coming-with-one-rumored-upgrade/" target="_blank" rel="nofollow">according to 9to5Mac</a>.</p><p>Not happy with having a pair of premium earbuds in its roster, Apple seems intent on making the AirPods line more convoluted and confusing than ever. Two <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a> models and two Pro models.</p><h2 id="all-of-the-airpods">All of the AirPods</h2><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="CCARdTZcz63KBvps4KSb3b" name="Airpods_pro 4.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/CCARdTZcz63KBvps4KSb3b.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>Apparently, the new version of the AirPods looks to replace the traditional idea of smart glasses. To that end, the new model would be equipped with IR cameras, as well as AI integration, so they can make sense of the world around you.</p><p>In my opinion, though, it feels like a lot of unnecessary feature bloat, forgetting what makes the AirPods so good in the first place: An excellent audio experience and magical connection with Apple devices.</p><h2 id="how-likely-are-they">How likely are they?</h2><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="Q7LZEeQj46Hd3tBS5MiM2b" name="Airpods_pro 3.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b.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>Most of the rumors and rumblings that 9to5Mac reports here are old — some of them even pre-AirPods Pro 3 launch. It could be that we see a version of the AirPods Pro 3 launch with some fancy new cameras in the future, but there hasn't really been anything new since last September.</p><p>Going by AirPods release calendars past, we could expect a light refresh of the Pro 3 after about a year and a half. That's if things go the same way as the AirPods Pro 2, and given that they only upgraded to match the EU's USB-C mandate, I'm not sure the Pro 3 will follow suit.</p><p>Do we need another AirPods Pro model? I'm going to say probably not — the AirPods line is getting confusing enough already, without a second model of more premium AirPods Pro 3 cluttering things up even more.</p><p>IR cameras could well be an update to future models of AirPods, but only time will tell whether it's a new model or a refreshed one.</p><h3 class="article-body__section" id="section-more-from-tom-s-guide"><span>More from Tom's Guide</span></h3><ul><li><a href="https://www.tomsguide.com/wellness/smartwatches/this-garmin-accessory-is-the-best-usd8-ive-spent-every-garmin-owner-should-get-one">This Garmin accessory is the best $8 I’ve spent — every Garmin owner should get one</a></li><li><a href="https://www.tomsguide.com/computing/android-tablets/i-just-held-the-worlds-thinnest-tablet-at-ces-2026-and-it-makes-the-ipad-pro-look-bloated">I just held the world's thinnest tablet at CES 2026 — and it makes the iPad Pro look bloated</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/new-netflix-shows-and-movies-january-5-11-2026">Netflix new releases — 7 shows and movies you need to stream this week (Jan. 5-11)</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ AirPods Max 2 — where are they, why aren’t they here yet, and what we want from them ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/airpods-max-2-where-are-they-why-arent-they-here-yet-and-what-we-want-from-them</link>
                                                                            <description>
                            <![CDATA[ The AirPods Max are getting a bit long in the tooth, even after their USB-C upgrade. So what's next for Apple's over-ear headphones? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RcRpySrW6AnjYwQrcGrtb8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/PKWiMkno2x5p2hpDh4TK9H-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 29 Dec 2025 06:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Over-Ear Headphones]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/PKWiMkno2x5p2hpDh4TK9H-1280-80.jpg">
                                                            <media:credit><![CDATA[Shutterstock]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Max 2 rumors ]]></media:description>                                                            <media:text><![CDATA[AirPods Max 2 rumors ]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Max 2 rumors ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/PKWiMkno2x5p2hpDh4TK9H-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/reviews/apple-airpods-max">AirPods Max</a> are, despite Apple's best efforts, an old pair of headphones. We first saw the Lightning model over five years ago, and then the USB-C version only changed the colors and added a new charging port in 2024. We still await the <a href="https://www.tomsguide.com/audio/airpods-max-2-rumors-everything-we-know-so-far">AirPods Max 2</a>.</p><p>So what do I think we'll see out of the AirPods Max, and why have we not seen them yet? And perhaps most importantly, what do we want from Apple's next pair of the <a href="https://www.tomsguide.com/us/best-noise-cancelling-headphones,review-5566.html">best noise-canceling headphones</a>?</p><h2 id="aripods-max-2-where-are-they">AriPods Max 2: Where are they?</h2><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="hwY5N6FW94b26UuUefzdX" name="AirPods Max USB-C-12" alt="The AirPods Max USB-C in a photo studio" src="https://cdn.mos.cms.futurecdn.net/hwY5N6FW94b26UuUefzdX.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 AirPods Max 2 have long been rumored. Instead, all we got so far has been the <a href="https://www.tomsguide.com/audio/you-can-now-buy-the-brand-new-airpods-max-usb-c-but-you-should-get-the-lightning-version-instead">USB-C version of the AirPods Max</a>, launched to placate the EU and its need for a universal charging standard.</p><p>Sure, we also got the USB-C listening mode and some lovely new colors, but there was no way you could call them any kind of sequel. They were a stopgap, to keep us happy until the next version comes along.</p><p>So when can we expect them? Good question. Now that Apple has launched the USB-C version, I'm not sure we'll be seeing them any time soon. After all, there were 4 years between the Lightning and USB-C versions, so the timeline could well be that long again.</p><p>Having said that, I'd like to cast our minds back to the USB-C version of the <a href="https://www.tomsguide.com/reviews/airpods-pro-2-review">AirPods Pro 2</a>. They launched a mere year or so after the Lightning version, only to be replaced again another year later by the <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a>. Perhaps, then, we could have a similar situation with the AirPods Max 2, and we're only a few months out from a new version. </p><p>One can hope.</p><div class="product"><a data-dimension112="3af5cdf6-3202-4aa3-a117-152063cf0db4" data-action="Deal Block" data-label="The AirPods Max are Apple's most premium pair of headphones. Despite a pretty disappointing 20 hours of battery life, the AirPods make up for it with excellent noise canceling, a comfortable fit, and great sound quality." data-dimension48="The AirPods Max are Apple's most premium pair of headphones. Despite a pretty disappointing 20 hours of battery life, the AirPods make up for it with excellent noise canceling, a comfortable fit, and great sound quality." data-dimension25="$449" href="https://www.amazon.com/dp/B0DGHYDZSD/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1141px;"><p class="vanilla-image-block" style="padding-top:131.46%;"><img id="D2JwLPiXTpLWNJWs32ARJK" name="AirPods Max" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/D2JwLPiXTpLWNJWs32ARJK.png" mos="" align="middle" fullscreen="" width="1141" height="1500" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Max are Apple's most premium pair of headphones. Despite a pretty disappointing 20 hours of battery life, the AirPods make up for it with excellent noise canceling, a comfortable fit, and great sound quality.<a class="view-deal button" href="https://www.amazon.com/dp/B0DGHYDZSD/" target="_blank" rel="nofollow" data-dimension112="3af5cdf6-3202-4aa3-a117-152063cf0db4" data-action="Deal Block" data-label="The AirPods Max are Apple's most premium pair of headphones. Despite a pretty disappointing 20 hours of battery life, the AirPods make up for it with excellent noise canceling, a comfortable fit, and great sound quality." data-dimension48="The AirPods Max are Apple's most premium pair of headphones. Despite a pretty disappointing 20 hours of battery life, the AirPods make up for it with excellent noise canceling, a comfortable fit, and great sound quality." data-dimension25="$449">View Deal</a></p></div><h2 id="why-hasn-t-apple-launched-them">Why hasn't Apple launched them?</h2><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="KHWarBmWHHK5G8GvjdsWY" name="AirPods Max USB-C-05" alt="The AirPods Max USB-C in a photo studio" src="https://cdn.mos.cms.futurecdn.net/KHWarBmWHHK5G8GvjdsWY.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>This is a pertinent question. <a href="https://www.bloomberg.com/authors/AS7Hj1mBMGM/mark-gurman">Mark Gurman of Bloomberg</a> believes that it's because the AirPods Max have not been successful enough to warrant a new version, but they're selling well enough to justify leaving them on shelves. That suggests we may not see a new version at all.</p><p>There is some degree of "they're still great" that comes into play as well. Despite some points showing their age, like the 20 hour battery life, the current AirPods Max are still top performers. The ANC can hang with the best of them from Sony and Bose, and the sound is still some of the best around.</p><p>The true reason, however, remains a mystery. </p><h2 id="what-do-i-want-from-the-airpods-max-2">What do I want from the AirPods Max 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="qafSzYKCHXU6TQBHCe4RZ" name="AirPods Max USB-C-07" alt="The AirPods Max USB-C in a photo studio" src="https://cdn.mos.cms.futurecdn.net/qafSzYKCHXU6TQBHCe4RZ.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 much as I like the AirPods Max (and despite my many criticisms of the headphones), there is some work to be done to make them even better. For one, while the headband is comfortable and extremely cool looking, it loses its elasticity with age. </p><p>My Lightning pair has become loose and saggy, and when I wear them, the two metal arms that support the fabric rest on the top of my head. My USB-C version has survived better so far, but it still leaves me worried for the future.</p><p>Strengthen that material, and we're onto a winner. When it's taught, there's little more comfortable atop your head — let's see it stay that way.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:2000px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="G5tpjY2D6sDaShJRAgpnX" name="AirPods Max USB-C-11" alt="The AirPods Max USB-C in a photo studio" src="https://cdn.mos.cms.futurecdn.net/G5tpjY2D6sDaShJRAgpnX.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>There are likely hundreds of thousands of words written about the abominable case that comes packed with the AirPods Max — some of them mine — so I won't labor the point too much. Only that it is bad, and I don't like it.</p><p>Some form of proper case with the next version would be very welcome, with a way to not only actually protect the headphones but store something like a cable. And make it out of something that doesn't gather dust and grease within a femtosecond.</p><p>Then there's the obvious: Battery life. 20 hours is just not enough, no matter how you slice it. The competition can last longer than the AirPods Max, sometimes over twice as long, so I'd like to see <em>at least </em>30 hours of life in the next model.</p><p>There's one thing that really needs to stay, though. The incredible, tactile controls that are a joy to use. There are few control methods built into a pair of headphones that even come close to the dial and button combo on the AirPods Max. If that's gone from the AirPods Max 2, I'll riot.</p><p>You have been warned, 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/audio/speakers/i-just-tested-this-all-in-one-music-streaming-amplifier-and-i-want-to-put-one-in-every-room-in-my-house">I just tested this all-in-one music streaming amplifier — and I want to put one in every room in my house</a></li><li><a href="https://www.tomsguide.com/audio/airpods/ive-been-using-the-airpods-pro-3-for-three-months-the-good-the-bad-and-the-ugly">I've been using the AirPods Pro 3 for three months — the good, the bad and the ugly</a></li><li><a href="https://www.tomsguide.com/ai/the-9-weirdest-ways-i-used-ai-in-2025-and-the-surprising-part-is-they-actually-worked">The 9 weirdest ways I used AI in 2025 — and the surprising part is they actually worked</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Just got some AirPods for Christmas? Here’s what you need to do first ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/just-got-some-airpods-for-christmas-heres-what-you-need-to-do-first</link>
                                                                            <description>
                            <![CDATA[ If you just got AirPods for Christmas, this is the guide to making sure they are set up perfectly. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">X5JHaFFHeYP2NAhJbUmAB8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 25 Dec 2025 14:30:00 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ ashley.thieme@futurenet.com (Ashley Thieme) ]]></author>                    <dc:creator><![CDATA[ Ashley Thieme ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/3AWovHjApwuNrSGRS6WBcL.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Ashley Thieme is a staff writer on the Reviews team at Tom’s Guide where she tests out the latest tech so you can know what’s going to be worth your time and money.She has a master’s degree in Magazine Journalism and a bachelor’s degree in Journalism, Media and Sociology from Cardiff University. She has bylines in titles including Women’s Health UK online, sharing the latest health and wellness news stories, and Virgin Radio UK, providing the latest entertainment news and working on celebrity interviews.She has experience reporting on a variety of topics including music, literature, motorsport, entertainment and health, and has her own newsletter where she shares reviews of her favorite books, Ashley’s Reading Nook. In previously published work, she has reviewed live music events, books, and wellness products.She values the importance of tech enhancing your life rather than taking over, and as a music fanatic, she is always looking for the best way to listen to new music releases. Discovering the top audio equipment that enhances sound quality and provides optimum comfort is what Ashley does best.In her spare time, Ashley enjoys hitting her reading goals on Goodreads by getting into the latest fantasy novels with a cup of tea as well as getting out in the Welsh mountains for a good hike on the weekend.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>So, you got AirPods for Christmas. What now? Well, even though these are some of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best wireless earbuds</a> and the perfect companion for your iPhone, they need to be set up correctly so you can enjoy all the benefits of having a new addition to your Apple ecosystem. </p><p>Having the right setup means you’ll have the best experience when using the earbuds and the best sound quality possible. These are some of the steps you can take as soon as you get your new AirPods to ensure everything runs smoothly. </p><h2 id="step-1-give-them-a-unique-name">Step 1. Give them a unique name</h2><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="ASdWQTCTF9zU3GEPCHyB5b" name="Airpods_pro 5.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/ASdWQTCTF9zU3GEPCHyB5b.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>Obviously, the first thing you’ll need to do is connect the AirPods via Bluetooth to your device. This is straightforward enough, as your Apple device will automatically recognize the earbuds as soon as you open the case. </p><p><strong>Making sure you name the AirPods on their first connection is essential</strong>, as you’ll be able to recognize them when you move on to connecting to more devices. I also like to set up multipoint connection with my most used devices. </p><p>Multipoint connection allows you to switch seamlessly between audio from multiple devices. I love using this feature while I’m working to switch between video calls on my laptop and music on my phone. It’s super handy, and if you set it up right away, it avoids any fuss when you’re rushing to switch over.</p><h2 id="step-2-turn-on-find-my">Step 2. Turn on Find My...</h2><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="AJBGL2fSEsbSAhyLuPWkya" name="Airpods_pro.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/AJBGL2fSEsbSAhyLuPWkya.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><strong>Make sure you allow </strong><a href="https://www.tomsguide.com/how-to/how-to-share-location-on-iphone-using-find-my"><strong>Find My </strong></a><strong>to track your AirPods.</strong> This makes them so easy to find if you ever misplace them. And you may think that won’t be an issue, but I find myself pinging my AirPods on the Find My app more than I care to admit — and I’d say I’m pretty organized.</p><p>You can also set up an alert for the app to alert you if you ever leave your AirPods behind. I find this feature especially useful, and I often forget to throw them in my bag as I head out the door, so it reminds me to turn around and grab them.</p><h2 id="step-3-run-the-fit-test">Step 3. Run the fit test</h2><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="J876Nc8tHRQgueVDH6D46b" name="Airpods_pro 12.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/J876Nc8tHRQgueVDH6D46b.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>With new models, like the <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> and the <a href="https://www.tomsguide.com/reviews/apple-airpods-max">AirPods Max</a>, <strong>you can </strong><a href="https://www.tomsguide.com/how-to/how-to-do-an-ear-tip-fit-test-for-airpods-pro"><strong>run a fit test</strong></a><strong> to make sure you’re getting optimal sound performance</strong>. This ensures you’re getting the best ANC (active noise cancellation) and transparency mode performance. </p><p>Not getting the best results? You can try the different-sized ear tips that come with the buds to see which ones give the best seal for noise cancellation. </p><p>New features on the AirPods 3 will also perform better with a more accurate eartip fit too. These buds have sensors for health tracking, and these metrics will be far more accurate with a better fit. </p><h2 id="step-4-make-sure-you-re-listening-to-lossless-audio">Step 4. Make sure you're listening to lossless 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:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q7LZEeQj46Hd3tBS5MiM2b" name="Airpods_pro 3.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b.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 the audiophiles out there, the most important step in setting up your new AirPods will be enabling lossless audio. It’s going to use up a lot more mobile data, so be aware of that, but if you want the best quality audio possible with your music, <strong>you need to enable this high fidelity setting in your music streaming app(s)</strong>. </p><p>You’ll get a better performance with this feature if you use Apple Music for streaming (and you should get 3 months free with an AirPods purchase at Apple), but <a href="https://www.tomsguide.com/entertainment/music-streaming/spotifys-lossless-listening-makes-music-sound-brand-new-heres-how-to-enable-it">Spotify recently upgraded</a> its streaming platform to offer lossless streaming to iPhone users.</p><p>But the most important thing is to enjoy the music you listen to with these earbuds, as they are going to soundtrack your life for you. From train journeys to long walks, my AirPods come everywhere, and I think you’re going to love using yours with the right setup.</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/audio/bluetooth-speakers/i-test-bluetooth-speakers-for-a-living-and-these-are-the-best-ones-ive-used-in-2025"><strong>I test Bluetooth speakers for a living — and these are my 3 top picks for 2025</strong></a></li><li><a href="https://www.tomsguide.com/audio/speakers/i-just-tested-this-all-in-one-music-streaming-amplifier-and-i-want-to-put-one-in-every-room-in-my-house"><strong>I just tested this all-in-one music streaming amplifier — and I want to put one in every room in my house</strong></a></li><li><a href="https://www.tomsguide.com/audio/airpods/ive-been-using-the-airpods-pro-3-for-three-months-the-good-the-bad-and-the-ugly"><strong>I've been using the AirPods Pro 3 for three months — the good, the bad and the ugly</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been using the AirPods Pro 3 for three months — here's my pros and cons ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/ive-been-using-the-airpods-pro-3-for-three-months-the-good-the-bad-and-the-ugly</link>
                                                                            <description>
                            <![CDATA[ The AirPods Pro 3 are excellent earbuds, but there are some reasons why I don't use them every day. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">byp9d9zMe4zzbyVR6eyzin</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Wed, 24 Dec 2025 07:15:00 +0000</pubDate>                                                                                                                                <updated>Wed, 24 Dec 2025 13:51:30 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/DszdrfcZfamAZ79GbwKnsj-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>When the <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> launched, I found them a worthy upgrade to the <a href="https://www.tomsguide.com/reviews/airpods-pro-2-review">AirPods Pro 2</a>. They were more secure, sounded (to my ears at least) better, and offered a much-welcome battery life increase.</p><p>But now that I've been testing the AirPods Pro 3 for a few months, I've noticed some issues that I missed in my initial assessment. They're still some of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best wireless earbuds</a> you can buy — but my recommendation comes with some caveats from now on. Here's why.</p><h3 class="article-body__section" id="section-the-good"><span>The good</span></h3><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="AJBGL2fSEsbSAhyLuPWkya" name="Airpods_pro.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/AJBGL2fSEsbSAhyLuPWkya.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 AirPods Pro 3 get a lot right, as you might expect from Apple's premier earbuds. They're a worthy successor to the <a href="https://www.tomsguide.com/reviews/airpods-pro-2-review">AirPods Pro 2</a>, with plenty of upgrades that keep them fresh and new. </p><p>The ANC is a good example. The 2nd Gen model blocked out plenty of noise, sure, but the AirPods Pro 3 kick things up a notch, taking the fight handily to its main rivals, Sony and Bose.</p><div class="product"><a data-dimension112="4944dbaf-7e13-4d34-bab8-626953080005" data-action="Deal Block" data-label="The latest version of Apple's earbuds gives you plenty to be excited about. They sound good for a range of different listeners, and include improved active noise cancellation and a heart rate monitor for fitness fanatics." data-dimension48="The latest version of Apple's earbuds gives you plenty to be excited about. They sound good for a range of different listeners, and include improved active noise cancellation and a heart rate monitor for fitness fanatics." data-dimension25="$199" href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The latest version of Apple's earbuds gives you plenty to be excited about. They sound good for a range of different listeners, and include improved active noise cancellation and a heart rate monitor for fitness fanatics.<a class="view-deal button" href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow" data-dimension112="4944dbaf-7e13-4d34-bab8-626953080005" data-action="Deal Block" data-label="The latest version of Apple's earbuds gives you plenty to be excited about. They sound good for a range of different listeners, and include improved active noise cancellation and a heart rate monitor for fitness fanatics." data-dimension48="The latest version of Apple's earbuds gives you plenty to be excited about. They sound good for a range of different listeners, and include improved active noise cancellation and a heart rate monitor for fitness fanatics." data-dimension25="$199">View Deal</a></p></div><p>There seems to have been blocking improvements across the board, with attention paid to a range of frequencies. There's greater low-end performance, making sure that bus engines are silenced.</p><p>Nearby chatter is all but eliminated, and the algorithm is very good at finding loud noises and blocking them out. The AirPods Pro 3 are up there with the <a href="https://www.tomsguide.com/audio/earbuds/best-noise-canceling-earbuds">best noise-canceling earbuds</a>, that's for sure.</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="Q7LZEeQj46Hd3tBS5MiM2b" name="Airpods_pro 3.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b.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 battery life is also a massive bonus. The extra hours that Apple has packed make them a vastly better option than the previous model, with 10 hours of listening when you're using the transparency mode. 8 hours with ANC turned on is a big improvement over 6 hours as well.</p><p>The inclusion of wireless charging and the fast charge over USB-C are both big boons for the buds. The case is smooth and easy to fit into a pocket. They're still a great pair of earbuds for a range of different users — but use them long enough and some issues start to crop up.</p><h3 class="article-body__section" id="section-the-bad"><span>The bad</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3762px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="E8t7nwpeTcBTeLY9FyUjKS" name="AirPods Pro 3" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/E8t7nwpeTcBTeLY9FyUjKS.jpg" mos="" align="middle" fullscreen="" width="3762" height="2116" 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>After a few months of testing, not everything is so rosy for the AirPods Pro 3. The first issue that I've found? The sound quality of the buds doesn't stand up to scrutiny.</p><p>The AirPods Pro 2 had a very neutral sound profile. It was one of the buds' greatest strengths, further setting them apart from the likes of the <a href="https://www.tomsguide.com/reviews/sony-wf-1000xm5">Sony WF-1000XM5</a> and the <a href="https://www.tomsguide.com/reviews/bose-quietcomfort-ultra-earbuds">Bose QuietComfort Ultra Earbuds</a>. </p><p>The AirPods Pro 3 do <em>not </em>have a very neutral sound profile. There are improvements over the last model. There's slightly more detail, and the sound is slightly more weighty. In return, we've lost a sense of liveliness and fun in return for more dynamic bass, bringing them right in line with the Sony and Bose options.</p><p>That's a shame. On initial impression, the AirPods Pro 3 sound good. But extended listening and experience have shown me that they're a disappointing departure from what were some unique-sounding earbuds. </p><h3 class="article-body__section" id="section-the-ugly"><span>The ugly</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3233px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="cH2SC5LGgvgDoxQzjfrf7J" name="IMG_6769" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/cH2SC5LGgvgDoxQzjfrf7J.jpg" mos="" align="middle" fullscreen="" width="3233" height="1819" attribution="" endorsement="" class="inline"></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Future)</span></figcaption></figure><p>There are a few features that have become genuine irritations: The AirPods Pro 3 are, indeed, more secure than the AirPods Pro 2. They've changed shape to make sure that they stay firmly in your ear without the risk of falling out.</p><p>And that change isn't universally loved. Erin, one of our review team's senior writers, outright doesn't like the fit of the AirPods Pro 3 and has chosen to stick with the old model.</p><p>I'm not quite to that level. I find them less offensive, but I am not immune to the problems of their new shape. They now dig into your ear where the old model did not, and the new eartips reach further inside your ears. </p><p>It doesn't matter which of Apple's new eartips you try, from the XS fitting buds to the XL options; the shape of the buds has changed to a degree that makes them more uncomfortable for some users, myself included.</p><h3 class="article-body__section" id="section-should-you-buy-them"><span>Should you buy them?</span></h3><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1844px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="mHrXZUxPtzzkFNX8FXhYZQ" name="IMG_6812" alt="Woman in a cap wearing the Apple AirPods Pro 3 outside in the sunshine" src="https://cdn.mos.cms.futurecdn.net/mHrXZUxPtzzkFNX8FXhYZQ.jpg" mos="" align="middle" fullscreen="" width="1844" height="1037" 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>Despite my issues, the AirPods Pro 3 are still good earbuds for the majority of users. Their sound is generally pleasing, and the ANC is excellent by any standard.</p><p>That's not forgetting the extra features — the heart rate monitor and live translation — which make them a great option for iPhone and the Apple ecosystem faithful. What I would say, however, is that the purchasing decision now needs more careful thought.</p><p>There are plenty of options out there, including Sony and Bose earbuds, that are vying for your attention — and you can find them all on our list of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best wireless earbuds</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/audio/headphones/i-gave-up-my-quietcomfort-ultra-headphones-for-no-headphones-and-after-3-months-ive-never-felt-better">I gave up my QuietComfort Ultra Headphones for no headphones — and after 3 months I've never felt better</a></li><li><a href="https://www.tomsguide.com/ai/this-is-the-no-1-chatgpt-prompt-i-use-to-get-expert-level-advice-heres-how-to-use-it">The ‘handle it’ prompt makes ChatGPT give expert‑level advice — here’s how to use it</a></li><li><a href="https://www.tomsguide.com/gaming/todays-wordle-answer-is-brutal-heres-why-december-19s-puzzle-could-ruin-your-2025-streak">Today’s Wordle answer is brutal — here’s why December 19's puzzle could ruin your 2025 streak</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Hurry! AirPods Max are $100 off right now — and you can still get them by Christmas ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/airpods-max-are-the-holiday-gift-you-owe-yourself-and-they-just-fell-by-usd100-at-best-buy</link>
                                                                            <description>
                            <![CDATA[ The AirPods Max are down to $449 thanks to a generous $100 discount at Best Buy right now. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">C5XtdRhwj46KpTcWpz4Zp</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kmx7RQGv7cUwd4k8Rb28nU-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 22 Dec 2025 11:06:33 +0000</pubDate>                                                                                                                                <updated>Tue, 23 Dec 2025 16:12:11 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ jeff.parsons@futurenet.com (Jeff Parsons) ]]></author>                    <dc:creator><![CDATA[ Jeff Parsons ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/7z3UTGGrmSokMKxTWHmhjX.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Jeff is U.K. Editor-in-Chief for Tom’s Guide looking after the day-to-day output of the site’s British contingent. &lt;/p&gt;&lt;p&gt;Rising early and heading straight for the coffee machine, Jeff loves nothing more than dialling into the zeitgeist of the day’s tech news. A journalist for over a decade, he&#039;s travelled around the world testing and reviewing any gadget he can get his hands on.&lt;/p&gt;&lt;p&gt;Before joining the team at Tom’s Guide, Jeff covered technology and science for two of the U.K.’s biggest national news sites: Metro.co.uk and the Daily Mirror. Memorable moments include getting lost in Vienna in an electric Audi, touring Lockheed Martin’s mile-long jet factory in Fort Worth and filming a Netflix documentary about Elon Musk in West London.&lt;/p&gt;&lt;p&gt;When not plugged into the current news agenda, editing or commissioning a series of articles or debating the merits of Apple vs Android, Jeff can usually be found out for a run trying to shave precious seconds off his PB. Or lifting weights in a vain attempt to offset the ageing process.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/kmx7RQGv7cUwd4k8Rb28nU-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Max USB-C]]></media:description>                                                            <media:text><![CDATA[AirPods Max USB-C]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Max USB-C]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kmx7RQGv7cUwd4k8Rb28nU-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The AirPods Max are a pair of headphones every Apple user should have in their gadget bag. The company's noise-cancelling, over-ear headphones can seamlessly pair with any Apple device and deliver quality sound in a comfortable and premium package.</p><p>And while the price was always a sticking point, there's a <a href="https://www.bestbuy.com/product/apple-airpods-max-usb-c-midnight/JJGCQ3ZZ3Q" target="_blank" rel="nofollow">current deal on at Best Buy that knocks these headphones down by $100 to a much more friendly $449</a>. At that price, these big colorful cans from Apple are very much worth considering —and if you act fast, you'll still have them in time for Christmas morning.</p><div class="product"><a data-dimension112="271af60f-cee9-4cac-8784-a7da5cea4ce1" data-action="Deal Block" data-label="The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours." data-dimension48="The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours." data-dimension25="$449" href="https://www.bestbuy.com/product/apple-airpods-max-usb-c-midnight/JJGCQ3ZZ3Q" 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="J2MHuaSPwcbchpdd5EwcXU" name="AirPods Max USB-C" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J2MHuaSPwcbchpdd5EwcXU.jpg" mos="" align="middle" fullscreen="" width="1000" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours.<a class="view-deal button" href="https://www.bestbuy.com/product/apple-airpods-max-usb-c-midnight/JJGCQ3ZZ3Q" target="_blank" rel="nofollow" data-dimension112="271af60f-cee9-4cac-8784-a7da5cea4ce1" data-action="Deal Block" data-label="The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours." data-dimension48="The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours." data-dimension25="$449">View Deal</a></p></div><p>The reasons I don't count the <a href="https://www.tomsguide.com/reviews/apple-airpods-max">AirPods Max</a> as among <a href="https://www.tomsguide.com/us/best-headphones,review-1988.html">the best headphones</a> you can buy is for a few reasons: they're costly, they're heavy and the battery life isn't as good as you'll find elsewhere.</p><p>That may sound negative, but let me continue. This deal absolutely takes care of the first point, and the second point is negligible because they're also very comfortable. There's a springy, mesh headband that distributes the weight comfortably across your head. And part of the reason they're heavy is that (as you'd expect from Apple) they're premium. They're built from metal, not plastic — from the stainless steel sliders to aluminum earcups. </p><p>Battery life? Yeah, I can't really defend that too much. But at least Apple has updated these headphones with a USB-C port that'll charge them up quickly when they do run out of power. If you want something a bit more long-lasting, the <a href="https://www.tomsguide.com/audio/over-ear-headphones/the-headphones-i-use-for-long-haul-travel-are-down-to-their-lowest-price-ever-save-usd170-on-the-sonos-ace">Sonos Ace are down to their lowest price right now</a>, and here's what happened when <a href="https://www.tomsguide.com/audio/over-ear-headphones/airpods-max-vs-sonos-ace-headphones-which-flagship-headphones-win">I pitched the AirPods Max against the Sonos Ace last year</a>.</p><p>Those nitpicks aside, here's why the AirPods Max are <em>very</em> good: They've got excellent physical controls. Honestly, the idea of using an Apple Watch-style Digital Crown was inspired and the buttons give you a real satisfying click when you press them.</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="4edCPo7rt3xCPfxayFXSY" name="AirPods Max USB-C-10" alt="The AirPods Max USB-C in a photo studio" src="https://cdn.mos.cms.futurecdn.net/4edCPo7rt3xCPfxayFXSY.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 ANC on the AirPods Max is good, and the sound is excellent with a spacious sound. The Spatial Audio feature is brilliant if you're an<a href="https://www.tomsguide.com/entertainment/music-streaming/i-just-ditched-spotify-for-apple-music-and-these-3-unique-features-already-have-me-hooked"> Apple Music subscriber.</a> Finally, as mentioned, the fact that these headphones sync to your iCloud account means you can instantly transition between your iPhone, MacBook and iPad seamlessly. It's a synergy I've yet to experience in any other pair of headphones and makes these a must-pick if you're already using Apple's other tech.</p><p>This deal isn't quite the lowest we've ever seen. The AirPods Max USB-C were down to $399 during Black Friday. But this is only $50 above that and, as Best Buy notes, it's a <a href="https://www.bestbuy.com/product/apple-airpods-max-usb-c-midnight/JJGCQ3ZZ3Q" target="_blank" rel="nofollow">"limited time" deal</a>  — so if you want to take advantage, you'll need to be quick!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I just discovered these 5 hidden AirPods features — and they're game-changers ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/i-just-discovered-these-5-airpods-features-and-theyre-game-changers</link>
                                                                            <description>
                            <![CDATA[ The hidden AirPods features everyone should know about, and how to enable them. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">RGus4QGKfHtcTrWJefb2BP</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 21 Dec 2025 08:30:00 +0000</pubDate>                                                                                                                                <updated>Mon, 22 Dec 2025 13:34:19 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ kaycee.hill@futurenet.com (Kaycee Hill) ]]></author>                    <dc:creator><![CDATA[ Kaycee Hill ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/XR7uugHJo9GDpoV7ZN22Ae.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ null ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Most people use their AirPods for listening to music and taking calls, but Apple has quietly added dozens of features through software updates that completely change what these earbuds can do. You can nod your head to answer calls, use them as a real-time translator, or even take photos with your iPhone remotely. </p><p>If you bought AirPods in the last couple years or haven't explored your settings recently, you're probably missing capabilities that would actually be useful in your daily life. I discovered five features that made me realize I've been underusing my AirPods. Here's how to find and use each one.</p><section class="howto-block">                    <h3>1. Answer calls and texts by nodding your head</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/qTWTqkcso8N3vy8W3VCoCV.jpg"                                        alt="AirPods 4"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/qTWTqkcso8N3vy8W3VCoCV.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p>Your <a href="https://www.tomsguide.com/reviews/airpods-pro-2-review">AirPods Pro 2,</a><a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review"> Pro 3</a>, or <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a> can detect head movements and use them to control Siri and respond to notifications hands-free. When a call comes in or you receive a text message, you can nod your head up and down to accept or reply, or shake your head side to side to decline or dismiss. </p><p><strong>Put your AirPods in and make sure they're connected to your iPhone</strong>. Next, <strong>open Settings and tap your AirPods' name</strong> at the top of the screen.<strong> Scroll down and tap "Head Gestures"</strong> then <strong>toggle the switch on.</strong> You can customize which gesture does what by tapping the options below the toggle. </p><p>Use the "Try Head Gestures" button to test whether it's detecting your movements correctly. Once enabled, Siri will announce incoming calls and messages, and you can respond just by moving your head.</p></p>                </section><section class="howto-block">                    <h3>2. Use AirPods for real-time language translation</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/ViWtcPkNTZ7pzqdiMea4HD.jpg"                                        alt="AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/ViWtcPkNTZ7pzqdiMea4HD.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Future)</div></figure>                    <p><p><a href="https://www.tomsguide.com/audio/airpods/airpods-pro-3-live-translation-heres-how-to-use-ithttps://www.tomsguide.com/audio/airpods/airpods-pro-3-live-translation-heres-how-to-use-it">Live Translation</a> is one of the most impressive hidden features added in iOS 26. You  can translate conversations in real-time, letting you understand someone speaking a different language. If you're speaking English with someone who speaks Spanish, you'll hear what they're saying translated into English through your AirPods. </p><p>There are three ways to activate Live Translation: <strong>open the Translate app on your iPhone, press and hold the stem on both AirPods simultaneously, or ask Siri to "start Live Translation</strong>".<strong>  </strong></p><p>The translation happens live as the other person speaks, making it possible to have flowing conversations across language barriers. This works for multiple languages and is incredibly useful when traveling or speaking with people who don't share your language.</p></p>                </section><section class="howto-block">                    <h3>3. Automatically pause media during bedtime </h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/VimUcHhYDs3MGdtVQjAPBk.jpg"                                        alt="Music for sleep. Female lying in bed listening to music on AirPods"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/VimUcHhYDs3MGdtVQjAPBk.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Shutterstock)</div></figure>                    <p><p>If you regularly fall asleep while listening to music, podcasts, or videos with your AirPods in, sleep detection solves a common problem. Available on AirPods Pro 2, Pro 3, and AirPods 4, this feature uses sensors to detect when you've fallen asleep and automatically pauses whatever you're listening to. This saves battery life on both your AirPods and your phone. </p><p>To enable it, <strong>connect your AirPods to your iPhone, open Settings, tap your AirPods at the top of the screen, scroll down, and toggle on "Pause Media When Falling Asleep." </strong></p><p>Once activated, your AirPods will monitor your movement and breathing patterns to determine when you've dozed off and pause playback automatically.</p></p>                </section><section class="howto-block">                    <h3>4. Take photos using your AirPods as a remote</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="https://cdn.mos.cms.futurecdn.net/CCARdTZcz63KBvps4KSb3b.jpg"                                        alt="A pair of Apple AirPods Pro 3"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="https://cdn.mos.cms.futurecdn.net/CCARdTZcz63KBvps4KSb3b.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Tom's Guide)</div></figure>                    <p><p>Your AirPods can function as a camera remote shutter for your iPhone, which is perfect for group photos, selfies, or situations where you can't reach your phone's screen. </p><p>To do this, <strong>connect your AirPods to your iPhone, then go to Settings, tap your AirPods, scroll down to "Camera Remote," </strong>and choose whether you want to take photos by <strong>pressing the AirPods stem once or by pressing and holding</strong>. </p><p>Once configured, <strong>open the Camera app, set up your shot, and use the gesture you selected</strong> on your AirPods stem to trigger the shutter. This gives you a wireless remote control for photos without needing a separate device or timer. </p></p>                </section><section class="howto-block">                    <h3>5. Stop audio from jumping to nearby speakers</h3>                    <figure>                            <p class="bordeaux-image-check">                                <img    src="http://cdn.mos.cms.futurecdn.net/vKdZ34ZsqeXwh36iYoLtwU.jpg"                                        alt="Marshall Mode II vs. Apple AirPods"                                        onerror="this.parentNode.replaceChild(window.missingImage(),this)"                                        data-pin-media="http://cdn.mos.cms.futurecdn.net/vKdZ34ZsqeXwh36iYoLtwU.jpg"                                        class="expandable van-old-layout-image">                            </p><div class="credit">(Image: © Regan Coule/Future)</div></figure>                    <p><p>One of the most annoying AirPods behaviors is when your audio suddenly switches from your earbuds to a nearby Bluetooth speaker without warning. </p><p>iOS 26 added a hidden setting that prevents this. "Keep Audio with Headphones" locks your audio to your AirPods even when other Bluetooth devices are in range, so your music won't randomly jump to your car speakers, HomePod, or someone else's Bluetooth speaker. </p><p>To access this feature, <strong>open Settings, tap General, select "AirPlay & Continuity," and toggle on "Keep Audio with Headphones." </strong>Once activated, your audio will stay in your AirPods until you manually choose to switch it to another device. </p><p>This is incredibly useful in homes with multiple Bluetooth speakers or when you're in environments with many Bluetooth devices competing for your phone's attention.</p></p>                </section><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/audio/airpods/how-to-pair-airpods-with-any-android-phone-5-simple-steps">How to pair AirPods with any Android phone — 5 simple steps</a></li><li><a href="https://www.tomsguide.com/audio/your-earbuds-are-disgusting-heres-the-right-way-to-clean-them">Your earbuds are disgusting — here's how to clean them</a></li><li><a href="https://www.tomsguide.com/entertainment/music-streaming/spotifys-lossless-listening-makes-music-sound-brand-new-heres-how-to-enable-it">Spotify's Lossless listening makes music sound brand new</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I wish my AirPods would steal these 3 features from other headphones and earbuds ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/i-wish-my-airpods-would-steal-these-3-features-from-other-headphones-and-earbuds</link>
                                                                            <description>
                            <![CDATA[ The AirPods Pro 3 are very, very good — but they're missing some of the best features of the competition. I'd like to see these three features come to AirPods. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">rVeqZNJNRbWAHU3EmHU5Lg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 18 Dec 2025 12:13:58 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Earbuds]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I love the <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a>, I really do. They're some of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best wireless earbuds</a> that you can buy today, thanks to their comfortable fit, excellent sound and stellar noise canceling.</p><p>But I can't help but feel left wanting, occasionally, when I look at the competition. There are features out there that I feel would fit very well with the AirPods line, from a personalizable custom EQ to even more fitting options.</p><p>These features, found in the likes of the <a href="https://www.tomsguide.com/audio/earbuds/bose-quietcomfort-ultra-earbuds-2-review">Bose QuietComfort Ultra Earbuds</a>, would make the AirPods Pro 3 even better. Let's dive in and see what Apple should be adding to its AirPods sack before it brings a new pair to store shelves.</p><h3 class="article-body__section" id="section-fitting-wings"><span>Fitting wings</span></h3><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="BdCNRUedryKnQKvQmK8C4R" name="Bose QuietComfort Ultra Earbuds 2" alt="Bose QuietComfort Ultra Earbuds 2" src="https://cdn.mos.cms.futurecdn.net/BdCNRUedryKnQKvQmK8C4R.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>The most comfortable buds I've ever tried, hands down, are the QuietComfort Ultra Earbuds gen 2. They're also the most secure, and I'd wager that is down to the extra-fitting wings and assorted silicon 'bud bit' that ensure they stay in your ears.</p><p>I have particularly large ears, so fitting wings are a boon anyway. But even then, they stop tight buds from pushing their way out, and loose ones from shaking away. They needn't be particularly invasive — see how subtle the wings are above — but I'd love to see some on the AirPods.</p><p>Even better, they could be removable. Given that the AirPods are sweat and dust-proof, making them even more runner-friendly would be a massive positive to notch on their impressive belt.</p><p>Is it likely? Probably not. But we can always dream of AirPods that fit <em>even better</em>.</p><h3 class="article-body__section" id="section-customizable-eq"><span>Customizable EQ</span></h3><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="NLdedP98Uju82cvkrWUSTW" name="Sony WF-1000XM5-11.jpg" alt="Sony WF-1000XM5 hero shot with earbuds in white charging case" src="https://cdn.mos.cms.futurecdn.net/NLdedP98Uju82cvkrWUSTW.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>There is some customizability built into the AirPods line, thanks to pre-sets that change the sound, but there's no way to change the sound profile more granularly. Compare that to the likes of the <a href="https://www.tomsguide.com/reviews/sony-wf-1000xm5">Sony WF-1000XM5</a>, which you can tune to your heart's content with a comprehensive EQ section, and the AirPods come up wanting.</p><p>I'm not asking for much — just a few channels of adjustment. I'd like to be able to dial in the sound more to my taste, instead of relying on the sound engineers at Apple. They're very good, but you can't please absolutely everbody.</p><p>That would make the AirPods an even more compelling option in my eyes, allowing for more customizability.</p><h3 class="article-body__section" id="section-all-the-features-available-on-android"><span>All the features available on Android</span></h3><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="NCvqKqbM7SPSDJAssB6NMJ" name="TG_B&W-Pi8-3.jpg" alt="Bowers & Wilkins Pi8 wireless headphones" src="https://cdn.mos.cms.futurecdn.net/NCvqKqbM7SPSDJAssB6NMJ.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>This is about as likely to happen as the second great flood, but a girl can wish. The AirPods line, if you use an iPhone and other Apple devices, are as fully featured as they come. If, however, you happen to also use a Windows laptop, or an Android tablet, many of the features won't work.</p><p>They'll connect, and they'll play music, but you'll lose most of their most useful features. Hearing test won't work, the EQ presets can't be changed, and some of the touch controls might get a bit... funky.</p><p>I know that the Apple walled garden strengthens those that live within it — but one step outside of those glassy walls brings the restriction into stark daylight. Android customers make up swathes of the smartphone-buying public. There's a fresh customer base right there Apple, and some of them might want to buy some AirPods.</p><p>Why not open those gates?</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/audio/soundbars/no-more-cables-dolby-and-lg-are-making-wireless-dolby-atmos-sound-happen-in-2026">No more cables! Dolby and LG are making wireless Dolby Atmos sound happen in 2026</a></li><li><a href="https://www.tomsguide.com/audio/over-ear-headphones/i-test-headphones-for-a-living-and-heres-what-id-buy-instead-of-the-sony-wh-1000xm6-and-the-bose-quietcomfort-ultra-headphones-gen-2">I test headphones for a living — here's what I'd buy instead of the Sony WH-1000XM6 and Bose QuietComfort Ultra</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/the-pixel-watch-4-is-great-but-im-sticking-with-my-galaxy-watch-8-classic-heres-why">The Pixel Watch 4 is great, but I'm sticking with my Galaxy Watch 8 Classic — here's why</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Surprise! AirPods Pro 3 just dropped to lowest price ever — just $199 right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/woah-the-airpods-pro-3-just-dropped-to-usd199-lowest-price-ever</link>
                                                                            <description>
                            <![CDATA[ This is the best AirPods holiday deal — the AirPods Pro 3 are on sale for their lowest price ever. Act fast! ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">y9kc5ZZKn9UJBXBRCJipp8</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/XKQCLNddWK9LBX5qY4xgRP-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 11 Dec 2025 11:12:40 +0000</pubDate>                                                                                                                                <updated>Thu, 11 Dec 2025 20:00:44 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ millie.daviswilliams@futurenet.com (Millie Davis-Williams) ]]></author>                    <dc:creator><![CDATA[ Millie Davis-Williams ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/WU6pa7hKuxs5ScCoqcXYWA.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Millie is a Deals Editor at Tom&#039;s Guide specializing in tech deals content. Based in London, Millie has spent a lifetime stubbornly refusing to pay full price on any possible purchase. She has years of searching for the best discounts on the latest and greatest phones, TVs and gadgets under her belt, and knows how to sort the best deals from the rest. Helping readers save on the products they want is her mission, whether it’s an Apple Watch or a new tablet.&lt;/p&gt;&lt;p&gt;Since working at Tom’s Guide, Millie has covered retail events like Prime Day, Black Friday and Cyber Monday extensively, meaning she knows the products readers are looking for and the best times of year to hit “purchase.”&lt;/p&gt;&lt;p&gt;When she’s not looking for discounts, Millie covers news and writes how-to articles about everything from phones, streaming devices, and headphones to apps and video games.&lt;/p&gt;&lt;p&gt;In her spare time, Millie enjoys reading, gaming on her Nintendo Switch and creating digital art. She’s also a fan of watching Disney movies and collecting plush (the latter having totally taken over her bedroom.)&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/XKQCLNddWK9LBX5qY4xgRP-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3 held in hand]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3 held in hand]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3 held in hand]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/XKQCLNddWK9LBX5qY4xgRP-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I couldn't believe my eyes when I saw this deal. The recently released AirPods Pro 3 sold for $219 over Black Friday, and I was convinced they wouldn't get cheaper until next year at the earliest. But Amazon has just proved me wrong.</p><p>Right now, you can get the <a href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow">AirPods Pro 3 for $199 at Amazon</a>. These are the best Apple earbuds yet, packed with amazing sound, features and excellent active noise canceling. So, now's the time to make the upgrade (or gift these to the iPhone user in your life — they'll love you for it). For more gift ideas and sales, check out our <a href="https://www.tomsguide.com/sales-events/the-ultimate-holiday-gift-guide-2025">holiday gift guide</a> and best <a href="https://www.tomsguide.com/sales-events/best-christmas-deals-of-2025-save-big-on-holiday-gifts">Christmas deals</a> roundup.</p><ul><li><a href="https://www.amazon.com/stores/page/CDE6D3D1-FF52-4226-9ED9-5C04165875FA" target="_blank" rel="nofollow"><strong>shop all Apple deals at Amazon from $27</strong></a></li></ul><div class="product"><a data-dimension112="51b9443f-93f8-4b3e-a47c-a26096db1043" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$199" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 3 bring the heat with 10 hours of battery life, improved sound, and superior ANC. They're comfortable and have plenty of fitting options to make sure you can find the best fit for you. In our <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review" data-dimension112="51b9443f-93f8-4b3e-a47c-a26096db1043" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$199">AirPods Pro 3 review</a> we said the Editor's Choice buds deliver the upgrade iPhone users have been waiting for with improved battery life, stronger noise cancellation, and smart new features like Live Translation, which delivers real-time translations to your ears.<br><strong>Price check: </strong><a href="https://www.walmart.com/ip/AirPods-nbsp-Pro-nbsp-3/17835006350" target="_blank" rel="nofollow"><strong>$199 @ Walmart</strong></a><strong> | </strong><a href="https://www.bestbuy.com/product/apple-airpods-pro-3-wireless-active-noise-cancelling-earbuds-with-heart-rate-sensing-feature-white/JJGCQLYK5F" target="_blank" rel="nofollow"><strong>$219 @ Best Buy</strong></a><a class="view-deal button" href="https://www.amazon.com/Apple-Cancellation-Translation-Headphones-High-Fidelity/dp/B0FQFB8FMG" target="_blank" rel="nofollow" data-dimension112="51b9443f-93f8-4b3e-a47c-a26096db1043" data-action="Deal Block" data-label="AirPods Pro 3 review" data-dimension48="AirPods Pro 3 review" data-dimension25="$199">View Deal</a></p></div><div class="product"><a data-dimension112="a2440aa1-7317-4cd5-b7aa-0afa2af8b3b0" data-action="Deal Block" data-label="Price check: $149 @ Amazon" data-dimension48="Price check: $149 @ Amazon" data-dimension25="$99" href="https://www.walmart.com/ip/Apple-AirPods-4-with-Active-Noise-Cancellation/11384707978" 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:93.08%;"><img id="iW6XqU9SoqpTBgf9epawof" name="Apple AirPods 4 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iW6XqU9SoqpTBgf9epawof.jpg" mos="" align="middle" fullscreen="" width="679" height="632" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Looking for cheaper buds? While they don't sound as good as the AirPods Pro 3, the AirPods 4 ANC have all the same great features as the base AirPods 4, and they also include active noise cancellation. There's also support for Adaptive Audio, Transparency mode and Voice Isolation. This is their lowest price ever.<br><strong>Price check: </strong><a href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJ7HYG1" target="_blank" rel="nofollow" data-dimension112="a2440aa1-7317-4cd5-b7aa-0afa2af8b3b0" data-action="Deal Block" data-label="Price check: $149 @ Amazon" data-dimension48="Price check: $149 @ Amazon" data-dimension25="$99"><strong>$149 @ Amazon</strong></a><strong> | </strong><a href="https://www.bestbuy.com/product/apple-airpods-4-with-active-noise-cancellation-white/JJGCQ832YX" target="_blank" rel="nofollow"><strong>$149 @ Best Buy</strong></a><a class="view-deal button" href="https://www.walmart.com/ip/Apple-AirPods-4-with-Active-Noise-Cancellation/11384707978" target="_blank" rel="nofollow" data-dimension112="a2440aa1-7317-4cd5-b7aa-0afa2af8b3b0" data-action="Deal Block" data-label="Price check: $149 @ Amazon" data-dimension48="Price check: $149 @ Amazon" data-dimension25="$99">View Deal</a></p></div><p>The AirPods Pro 3 take a spot on our list of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best wireless earbuds</a> as the best option for iPhone users. They're incredibly easy to connect and use with all your Apple devices, which makes them an obvious choice. But besides that, they have a ton more to offer, too.</p><p>In our <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3 review,</a> we found that these had received pretty much all-around improvements from the previous version, including better sound quality, stronger active noise canceling and even more battery life. We heard incredibly crisp, clear audio during our testing, and outside distractions were all but silenced with active noise canceling turned on. You also get Spatial Audio support for immersive 3D sound.</p><p>Also new to the AirPods 3 is the useful Live Translate feature. Using Apple Intelligence, the buds can listen to your conversation live and translate it back to you in English, French, German, Portuguese and Spanish. This is a super useful feature for travellers. And for fitness fans, the AirPods Pro 3 have a heart rate sensor to monitor your heart rate while you're working out.</p><p>These earbuds are an incredible deal at $199, so get them while you can. I also recommend checking out our <a href="https://www.tomsguide.com/coupons/apple.com">Apple promo codes</a> and this <a href="https://www.tomsguide.com/wellness/running/limited-time-nike-sale-takes-an-extra-25-percent-off-15-deals-id-shop-now-on-running-shoes-and-apparel">Nike sale with 25% off running shoes, apparel and more</a>.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ AirPods 4 with ANC down to their lowest price since Black Friday - Don't miss out! ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/airpods-4-with-anc-down-to-their-lowest-price-since-black-friday-dont-miss-out</link>
                                                                            <description>
                            <![CDATA[ Cyber Monday might be over, but that doesn't mean every deal is gone. For instance, Amazon recently dropped the price of the AirPods 4 with ANC to their lowest price since Black Friday. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">zQzRCemXVLHKq9FdUE3hLW</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kDPxBNKMJUG8pyowsvrrp4-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 05 Dec 2025 17:12:58 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                <author><![CDATA[ josh.render@futurenet.com (Josh Render) ]]></author>                    <dc:creator><![CDATA[ Josh Render ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/KC66jeFVj9pkfXKGSojaoW.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Josh Render is a UK-based staff writer at Tom&#039;s Guides covering news and features focusing primarily on mobile phones and their workings. Josh has been around phones for many years, having worked in a few different second-hand retailers. He knows the ins and outs of most phones, including how to repair many of them. Meanwhile, he has worked as a freelance journalist for several publications which range over a bunch of different tech aspects. Josh is also a fan of pairing people with the right tech and helping people understand the more nuanced aspects of their latest purchases. Outside of phones Josh is a fan of video games, novels, and Warhammer and has worked around all three to some degree.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Josh has a degree in Film Production from the University of Central Lancashire and has worked for publications such as GameGrin and CBR as well as a few smaller independent outfits. He is often found trying to paint models, completing levels, reading books, or figuring out the next best gaming app to invest his time in.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/kDPxBNKMJUG8pyowsvrrp4-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Airpods 4 ANC deal]]></media:description>                                                            <media:text><![CDATA[Airpods 4 ANC deal]]></media:text>
                                <media:title type="plain"><![CDATA[Airpods 4 ANC deal]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kDPxBNKMJUG8pyowsvrrp4-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Worried that you missed out on all the good Black Friday and Cyber Monday deals for your next pair of earbuds? Well, we have some great news for you!</p><p>Right now, you can grab the <a href="https://www.amazon.com/dp/B0DGJ7HYG1/?th=1" target="_blank" rel="nofollow">Apple AirPods 4 with ANC for 45% off from Amazon</a>, meaning a final price of $179. This is the best price we've seen for the headphones since the recent Black Friday sales and beyond, so it's a great time to grab a pair. </p><div class="product"><a data-dimension112="f2611598-a165-463d-8e6f-67001972f3c1" data-action="Deal Block" data-label="Apple's AirPods 4 have a lot to offer, including the titular ANC, which helps to keep the noise out. The case also comes with some extra features, including Find My speaker. The battery life is pretty decent, reaching four hours while ANC  is activated." data-dimension48="Apple's AirPods 4 have a lot to offer, including the titular ANC, which helps to keep the noise out. The case also comes with some extra features, including Find My speaker. The battery life is pretty decent, reaching four hours while ANC  is activated." data-dimension25="$99" href="https://www.amazon.com/dp/B0DGJ7HYG1/?th=1" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:679px;"><p class="vanilla-image-block" style="padding-top:93.08%;"><img id="iW6XqU9SoqpTBgf9epawof" name="Apple AirPods 4 deal block.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/iW6XqU9SoqpTBgf9epawof.jpg" mos="" align="middle" fullscreen="" width="679" height="632" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>Apple's AirPods 4 have a lot to offer, including the titular ANC, which helps to keep the noise out. The case also comes with some extra features, including Find My speaker. The battery life is pretty decent, reaching four hours while ANC  is activated.<a class="view-deal button" href="https://www.amazon.com/dp/B0DGJ7HYG1/?th=1" target="_blank" rel="nofollow" data-dimension112="f2611598-a165-463d-8e6f-67001972f3c1" data-action="Deal Block" data-label="Apple's AirPods 4 have a lot to offer, including the titular ANC, which helps to keep the noise out. The case also comes with some extra features, including Find My speaker. The battery life is pretty decent, reaching four hours while ANC  is activated." data-dimension48="Apple's AirPods 4 have a lot to offer, including the titular ANC, which helps to keep the noise out. The case also comes with some extra features, including Find My speaker. The battery life is pretty decent, reaching four hours while ANC  is activated." data-dimension25="$99">View Deal</a></p></div><p>If you're looking for a new pair of earbuds to connect to your phone, then the <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a> are a great choice. In our review, we were especially impressed by the pro-level features that come with the headphones. For instance, <a href="https://www.tomsguide.com/reference/what-is-apple-spatial-audio-how-it-works-and-how-to-use-it">Personalized Spatial Audio</a>, <a href="https://www.tomsguide.com/how-to/how-to-enable-airpods-conversation-awareness-iphone">Conversation Awareness</a>, and <a href="https://www.tomsguide.com/audio/apple-airpods-finally-have-a-way-to-remove-background-noise-from-your-phone-calls-heres-how">Head Gestures</a>. It's a decent set of options for the price, and it grants you a lot of personalization for your listening experience. </p><p>All the features in the world don't mean much if a pair of earbuds doesn't offer great sound. Luckily, this is an area where the AirPods 4 excel, as Apple redesigned the acoustic architecture to prioritize richer bass and crisper highs compared to<a href="https://www.tomsguide.com/opinion/i-tried-airpods-pro-2-for-workouts-heres-what-happened"> AirPods 2. </a>When combined with the Active Noise Cancellation, you're getting a stellar audio experience, whether you're listening to music, videos or podcasts.</p><p>Speaking of ANC, the AirPods 4 support options to quiet the world around you or tune in with transparency mode. Now, it might not be to the level of the <a href="https://www.tomsguide.com/audio/earbuds/best-noise-canceling-earbuds">best noise-cancelling earbuds</a>, but for something that's now less than $100, it's very impressive. However, make sure you keep the ANC turned off if you're walking down a busy street. </p><p>If you're looking for a new pair of headphones, then this is a deal you don't want to miss. Make sure that you grab yours today!</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ I've been living with the AirPods Pro 3 for three months — what I like, what's changed, and what's bad ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/ive-been-living-with-the-airpods-pro-3-for-three-months-what-i-like-whats-changed-and-whats-bad</link>
                                                                            <description>
                            <![CDATA[ The AirPods Pro 3 have been out for a few months now, and they've been a portable companion to me the entire time. But have they earned a permanent place in my pocket? ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">5RTJ992cJRV2SZ2fHGTEJg</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 05 Dec 2025 11:09:59 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[A pair of Apple AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[A pair of Apple AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[A pair of Apple AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>I've had my <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> since the beginning — I suppose, in some way, I'm an early adopter. I even penned my thoughts about how they matched <a href="https://www.tomsguide.com/audio/airpods/ive-got-my-audiophile-ears-on-a-pair-of-airpods-pro-3-here-are-my-first-impressions">up with my "audiophile" sensibilities</a>, and found that they fared well. </p><p>I liked the way that they fit in my ears, and I enjoyed the sound re-engineered sound profile. The improved ANC proved to be a massive boon, closing the gap on the Bose and Sony-flavored in-ear competition. </p><p>I've now had some time to get comfortable with the buds. I've learned their foibles and become more intimately aware of bugbears and issues. I still like them — but am I still enamored?</p><div class="product"><a data-dimension112="fc1818c3-0346-454d-b8f0-491a1e2271d2" data-action="Deal Block" data-label="The AirPods Pro 3 are Apple's newest addition to the AirPods line, with some new features like the heart rate monitor and Live Translation. The fit has changed too, and there's plenty of battery to keep them going for long listening sessions." data-dimension48="The AirPods Pro 3 are Apple's newest addition to the AirPods line, with some new features like the heart rate monitor and Live Translation. The fit has changed too, and there's plenty of battery to keep them going for long listening sessions." data-dimension25="$249" href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 3 are Apple's newest addition to the AirPods line, with some new features like the heart rate monitor and Live Translation. The fit has changed too, and there's plenty of battery to keep them going for long listening sessions. <a class="view-deal button" href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow" data-dimension112="fc1818c3-0346-454d-b8f0-491a1e2271d2" data-action="Deal Block" data-label="The AirPods Pro 3 are Apple's newest addition to the AirPods line, with some new features like the heart rate monitor and Live Translation. The fit has changed too, and there's plenty of battery to keep them going for long listening sessions." data-dimension48="The AirPods Pro 3 are Apple's newest addition to the AirPods line, with some new features like the heart rate monitor and Live Translation. The fit has changed too, and there's plenty of battery to keep them going for long listening sessions." data-dimension25="$249">View Deal</a></p></div><h2 id="what-i-still-like">What I still like</h2><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="AJBGL2fSEsbSAhyLuPWkya" name="Airpods_pro.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/AJBGL2fSEsbSAhyLuPWkya.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>There is plenty that has made sure I still enjoy using my AirPods Pro 3. For one, the improved ANC really is a noticeable step up from my old pair of AirPods Pro 2. I've taken both on the same train journeys to see how they fare against noisy carriages, and the results weren't surprising.</p><p>The AirPods Pro 2 are still a good noise canceler, but extended time with the Pro 3 has highlighted the formers ANC weaknesses. There's better blocking of loud sounds with the Pro 3, sudden noises that want to pull you out of your ANC induced stupor. </p><p>They also do a better job of blocking noise while listening to podcasts and audiobooks, something the AirPods Pro 2 aren't all that proficient at. My three months has only enhanced my appreciation of the AirPods Pro 3 and their noise control.</p><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:5705px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Hfk4whZfbRUQkweEGA87QS" name="AirPods Pro 3" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Hfk4whZfbRUQkweEGA87QS.jpg" mos="" align="middle" fullscreen="" width="5705" height="3209" 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 can't forget the improved battery life. The increase over the old model is always appreciated, and it has changed over the last few months. They just... last longer. And that's good, because I can listen to more death metal. Good stuff. No notes. We may proceed.</p><h2 id="what-s-changed">What's changed</h2><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="MdXD8RefVwTvFzHy3xGy5b" name="Airpods_pro 11.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/MdXD8RefVwTvFzHy3xGy5b.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>Initially, I quite liked the new fit of the AirPods Pro 3. It seemed to be more secure and aided the seal for the noise canceling. Using them for three months has brought some irritating issues to light, unfortunately. </p><p>That snugger fit does make them terribly uncomfortable after a time. While most earbuds that reach further into your ear generally feature slimmer tips to avoid stretching your inner ear, the AirPods Pro 3 have much wider apertures.</p><p>They press more on the inside of my ear, and get pretty sore after a few hours of wear. The new bud shape has caused issues too. They press on my concha too hard, the problem becoming more obvious the longer they sit in my ear. </p><p>The result is an initially comfortable fit that gets treacherously close to "get these accursed things out of my ears" territory after a few hours of listening. It's not terrible, and it's more secure than the AirPods Pro 2, but there are more comfortable buds.</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:3514px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="n3j9j3n38KQTNxNEP9DRWA" name="IMG_6788" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/n3j9j3n38KQTNxNEP9DRWA.jpg" mos="" align="middle" fullscreen="" width="3514" height="1977" 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>My opinion on their sound profile has shifted as well. I was, at first, impressed with the new signature thanks to a warmer overall sound that I thought would make for an easier listen for a wider range of listeners.</p><p>While that may be true, I've found the sudden lack of proper detail a problem. The bass is good; it's dynamic, moving, and shifting with the best of them. But the attention to the "people pleasing" bits of the music has left the top end with some hard work to do.</p><p>Hard work that it seems too lazy to engage with. Extended listening sessions have only found me wanting for a return to the more "analytical" sound of the AirPods Pro 2, which revealed more detail and gave a more engaging listening experience.</p><p>The best way to listen to the AirPods Pro 3 is in the background — but I've never wanted to sit down and use them to actually get into my tunes. And that feels like a shame that's only become more of a bugbear over the last three months.</p><h2 id="what-s-bad">What's bad</h2><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="ASdWQTCTF9zU3GEPCHyB5b" name="Airpods_pro 5.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/ASdWQTCTF9zU3GEPCHyB5b.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>Live translations sounded like something that could have been great. It still could be, in fact, allowing me to communicate with people who don't speak the same language. But it would appearwe're a long way off, given that Live Translation in the AirPods Pro 3 (and by extension the AirPods Pro 2 and AirPods 4) simply doesn't work.</p><p>I've spoken to a friend who speaks Spanish to try it out a few times, and each time, it's gotten stuff wrong. "I would like to find the football stadium" became "I really like the football stadium." "Where's the best place to find a glass of wine?" became "There's some nice wine over there". </p><p>I'm not familiar enough with Spanish to understand why Live translation changed the meaning of my friend's words, and neither did he. Some were <em>real </em>headscratchers, pulling bizarre grammar out of nowhere.</p><p>Perhaps we were using it wrong. But the fact remains. I would've been stuck in Spain had anyone tried to communicate with me.</p><p>Perhaps with improvements to Apple Intelligence Live Translation will become what Apple wants it to be. But it feels like it's a long way off.</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:1417px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="iDCenZoN4f9bSfgNaLZjDo" name="IMG_6593" alt="AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/iDCenZoN4f9bSfgNaLZjDo.jpg" mos="" align="middle" fullscreen="" width="1417" height="797" 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>What was once a boon is starting to become increasingly grating with AirPods. Yes, their connection to Apple devices is magical, but it's also becoming a key weakness. Not everyone owns a MacBook to go with their iPhone, and iPads are becoming so expensive that some AirPods users can't afford to buy one.</p><p>There will be a subset of users who struggle to get their AirPods to connect to multiple things, and it doesn't help that the AirPods Pro 3 has a completely innocuous touch panel on the front of the case.</p><p>The Apple walled garden, which once felt so safe and secure, is starting to feel like a green prison. Stay within the garden, and everything will work; leave it for only a second, and things will go wrong. The last few months with the AirPods Pro 3 have only exacerbated the problem in my eyes.</p><p>I want to use my AirPods with more things, and I want the extra features to work. Spatial Audio, the heart rate sensor, personalized sound. But they don't, and that's a shame. This is not unique to Apple, to be clear, but it is most obvious when you look at just how locked down the AirPods are.</p><h2 id="will-they-be-staying-in-my-pocket">Will they be staying in my pocket?</h2><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="27G2pLXimP6vAog4vMjnza" name="Airpods_pro 10.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/27G2pLXimP6vAog4vMjnza.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>No. As much as I have enjoyed my time with the AirPods Pro 3, my 3-month experience has shown me that there are now better options for Apple users. They are, objectively, a better pair of buds than the AirPods Pro 2 with more battery and improved noise canceling.</p><p>But I just don't like them as much. The sound no longer scratches the crucial "can't wait to put them in my ears" itch, and the fit has revealed its weaknesses over extended wear.</p><p>I still like the AirPods Pro 3, but I'm falling out of love with Apple's buds. I'm coming to appreciate things that work with more devices, that put more stock into excellent sound, rather than extras like Live Translation and a heart rate monitor. </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/sleep-problems/doctor-warns-1-3-of-americans-dont-get-enough-of-this-vitamin-and-its-probably-why-you-cant-sleep">Doctor warns 1/3 of Americans don’t get enough of this vitamin — and it's probably why you can't sleep</a></li><li><a href="https://www.tomsguide.com/wellness/smartwatches/apple-watch-se-3-vs-apple-watch-se-2022-is-the-new-model-worth-the-upgrade">Apple Watch SE 3 vs Apple Watch SE 2022 — Is the new model worth the upgrade?</a></li><li><a href="https://www.tomsguide.com/entertainment/netflix/5-best-christmas-movies-on-netflix-to-stream-right-now">5 best Christmas movies on Netflix to stream right now</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Just bought the AirPods 4? Here's five things you need to do first ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/just-bought-the-airpods-4-heres-five-things-you-need-to-do-first</link>
                                                                            <description>
                            <![CDATA[ The AirPods 4 were at their very cheapest over Black Friday — here's some tips and tricks to get them working their best. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">EHbn2ZkeTVqGhbmk7wxyue</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/uKSSLPpfSUmKyg5PvvDumX-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 04 Dec 2025 11:24:48 +0000</pubDate>                                                                                                                                <updated>Thu, 04 Dec 2025 11:25:27 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/uKSSLPpfSUmKyg5PvvDumX-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods 4 on a table]]></media:description>                                                            <media:text><![CDATA[AirPods 4 on a table]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods 4 on a table]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/uKSSLPpfSUmKyg5PvvDumX-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a> were so cheap over Black Friday (<a href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJ7HYG1" target="_blank" rel="nofollow">still are at $99</a>) that a massive chunk of our readership have grabbed a pair. Now I want to help you make the most of them with some key expert tips.</p><p>With all the music, podcasts, TV shows and audiobooks you'll be listening to with these, there are five extra features you should use to get the most out of your shiny new Apple earbuds.</p><div class="product"><a data-dimension112="e838fcf8-9290-4dcd-934a-08de63cfa0a5" data-action="Deal Block" data-label="AirPods 4 review" data-dimension48="AirPods 4 review" data-dimension25="$99" 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:602px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="HbhR8rjxwsEAwkj5dWLxHa" name="AirPods 4.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/HbhR8rjxwsEAwkj5dWLxHa.jpg" mos="" align="middle" fullscreen="" width="602" height="602" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>AirPods 4 with ANC are still at their Black Friday lowest price of just $99. In our <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review" data-dimension112="e838fcf8-9290-4dcd-934a-08de63cfa0a5" data-action="Deal Block" data-label="AirPods 4 review" data-dimension48="AirPods 4 review" data-dimension25="$99">AirPods 4 review</a>, we found their noise cancellation surprisingly effective, and also liked that the case has Apple Find My built in, in case they go missing. Yes, we wish battery life were longer, but this is still a great deal.<a class="view-deal button" href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJ7HYG1" target="_blank" rel="nofollow" data-dimension112="e838fcf8-9290-4dcd-934a-08de63cfa0a5" data-action="Deal Block" data-label="AirPods 4 review" data-dimension48="AirPods 4 review" data-dimension25="$99">View Deal</a></p></div><p>Bear in mind that these are all using an iPhone, but will work with both the ANC and non ANC models of the AirPods 4</p><h2 id="1-activate-spatial-audio">1. Activate Spatial 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:4842px;"><p class="vanilla-image-block" style="padding-top:56.24%;"><img id="Hmq4QSFLWMuaxhtshpSUtS" name="IMG_7876.jpg" alt="AirPods 4" src="https://cdn.mos.cms.futurecdn.net/Hmq4QSFLWMuaxhtshpSUtS.jpg" mos="" align="middle" fullscreen="" width="4842" height="2723" 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>It's one of the most important features of the buds, after all. For <a href="https://www.tomsguide.com/reviews/apple-music-review">Apple Music</a> listeners, it enhances your listening experience with a widened soundstage, so that the music sounds like it's coming from all around you. That provides a more immersive experience, with specially designed mixes tailored for the AirPods line.</p><p>You can set it up by heading to <strong>Settings > Airpods > Personalized Spatial Audio</strong>. From there, you can dial in the Spatial Audio settings. You'll also need to turn on Spatial Audio in your Audio settings.</p><p>Head to the <strong>Apps</strong><em> </em>section of the settings menu, and find <strong>Music</strong>. Scroll down until you find the <strong>Audio </strong>section. In the <strong>Dolby Atmos</strong> section, you'll want to select <strong>Automatic</strong>. This ensures your music plays in Spatial Audio when applicable. Remember, not every track is Atmos-optimized, so you won't always find the little Atmos logo in your now-playing screen.</p><h2 id="2-activate-lossless-listening">2. Activate Lossless listening</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1821px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="r4u3bZHCoKtr2FSN5jeH47" name="automix-2" alt="Automix in a playlist in Apple Music with iOS 26" src="https://cdn.mos.cms.futurecdn.net/r4u3bZHCoKtr2FSN5jeH47.jpg" mos="" align="middle" fullscreen="" width="1821" height="1024" 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>Your new AirPods are capable of impressive lossless listening, bringing more detail to the table for enhanced sound quality. There is a slight difference in sound quality, and I think it's worth it. It's also really easy to set up.</p><p><strong>WARNING! </strong>Before you go ahead and turn on lossless listening, be prepared for a hefty data bill if you don't have loads of gigabytes ready to use. </p><p>To find the Lossless audio setting, head to the settings menu, then click on the <strong>Apps</strong> page on the bottom. From there, navigate to <strong>Music</strong>, followed by <strong>Audio Quality </strong>in the <strong>Audio</strong> menu. </p><p>On the next screen, you'll find some options. You can choose to play lossless audio over your mobile data (not recommended if you've not got much data), with Wi-Fi (recommended) and with your downloaded tracks (also recommended, unless you've not got much storage).</p><p>After that you'll find the Lossless logo under the progress bar of compatible tracks. </p><h2 id="3-use-head-gestures-to-control-them">3. Use head gestures to control them</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1862px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="UKdVmYCPacMGPK6AgyEFmE" name="IMG_7866.jpg" alt="AirPods 4" src="https://cdn.mos.cms.futurecdn.net/UKdVmYCPacMGPK6AgyEFmE.jpg" mos="" align="middle" fullscreen="" width="1862" height="1047" 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 can control your AirPods with your head. When it's cold, you'll never have to pull them from your pocket, or when you've got your hands full of shopping, you don't have to drop the watermelon to answer an emergency call from your mom.</p><p>When someone calls you, shake your head to reject the call, and nod your head to accept it. It's simple and very effective.</p><p>To turn it on, head to the <strong>Settings </strong>menu. Then, select the <strong>AirPods </strong>option. From there, you can find the <strong>Head Gestures </strong>menu, where you'll find a toggle switch.</p><h2 id="4-pair-them-to-other-devices">4. Pair them to other devices</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3667px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="UMXRo3jZ6wo7vr4PP9HA8Z" name="IMG_7864.jpg" alt="AirPods 4" src="https://cdn.mos.cms.futurecdn.net/UMXRo3jZ6wo7vr4PP9HA8Z.jpg" mos="" align="middle" fullscreen="" width="3667" height="2063" 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>Did you know that there's a touch sensitive pairing button on your AirPods 4 case? It's hidden away, but it's there. While pairing with an iPhone is as easy as opening your buds near your case, pairing with other devices requires you to use this "pairing panel." I can't really call it a button, can I?</p><p><strong>Tap the front of the case once to check the battery status</strong>, and then <strong>tap twice to activate pairing mode</strong>. Then you can connect them to other devices like any other pair of wireless earbuds.</p><h2 id="5-use-them-to-watch-your-apple-tv">5. Use them to watch your Apple 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="DW7Cb7YncewfSAxQJZPQfi" name="TG_Apple-TV-4K_2021-10.jpg" alt="Apple TV 4K (2021) review" src="https://cdn.mos.cms.futurecdn.net/DW7Cb7YncewfSAxQJZPQfi.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>Watching a movie while you're up late, and don't want to wake the rest of the family? Pop your AirPods 4 in your ears and enjoy the sound without stirring your nearest and dearest. </p><p>They connect pretty much automatically, as long as you use the same Apple account on your <a href="https://www.tomsguide.com/us/apple-tv-4k,review-4693.html">Apple TV 4K</a> as your iPhone or iPad. You might need to select them in the sound menu in the quick menu on the Apple TV — hit the power button, and there's the "sound" menu, where you can select the earbuds — but it otherwise works seamlessly.</p><p>They also play Surround sound and Dolby Atmos mixes, where applicable.</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/music-streaming/spotify-wrapped-2025-is-here-but-why-do-we-crave-the-stats-every-year">Spotify Wrapped 2025 is here — Why I crave the stats every year</a></li><li><a href="https://www.tomsguide.com/tvs/sony-true-rgb-tvs-explained-and-why-its-newest-tv-tech-could-be-an-oled-killer">Sony 'True RGB' TVs are coming — and they could be an OLED-killer</a></li><li><a href="https://www.tomsguide.com/computing/malware-adware/this-spyware-campaign-can-turn-your-browser-extensions-into-malware-how-to-stay-safe">Over 4 million users hit with spyware that can turn your browser extensions into malware — how to stay safe</a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Best AirPods Cyber Monday deals LIVE: I'm tracking all the best savings on AirPods 4, AirPods Max and more ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/live/news/airpods-cyber-monday-deals-live-2025</link>
                                                                            <description>
                            <![CDATA[ There are loads of AirPods savings to be had right now — and I'm tracking them live. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">WbCTPE2GimztJPLmNeuDf6</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/H3HvYF23kdvLMn8489kkik-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Mon, 01 Dec 2025 09:26:56 +0000</pubDate>                                                                                                                                <updated>Mon, 01 Dec 2025 17:19:13 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                        <dc:contributor><![CDATA[ Sam Hopes ]]></dc:contributor>
                                                                    <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/H3HvYF23kdvLMn8489kkik-1280-80.jpg">
                                                            <media:credit><![CDATA[Apple, Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[Cyber Monday AirPods ]]></media:description>                                                            <media:text><![CDATA[Cyber Monday AirPods ]]></media:text>
                                <media:title type="plain"><![CDATA[Cyber Monday AirPods ]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/H3HvYF23kdvLMn8489kkik-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <div  class="fancy-box"><div class="fancy_box-title"></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="H3HvYF23kdvLMn8489kkik" name="Cyber Monday AirPods" caption="" alt="Cyber Monday AirPods" src="https://cdn.mos.cms.futurecdn.net/H3HvYF23kdvLMn8489kkik.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: Apple, Tom's Guide)</span></figcaption></figure><p class="fancy-box__body-text">1.  <a data-analytics-id="inline-link" href="#section-quick-links">Quick Links</a><br>2. <a data-analytics-id="inline-link" href="#section-best-cyber-monday-airpods-deals">AirPods deals<br></a>3.<a data-analytics-id="inline-link" href="#section-live-updates"> Live updates</a></p></div></div><p>Grab yourself an AirPods bargain this <a href="https://www.tomsguide.com/live/news/cyber-monday-deals-live-2025-from-three-dollars" target="_blank" rel="nofollow">Cyber Monday</a>. There are loads of deals on some great options, with the lowest prices on a wide range of different devices — from the cheapest to the most expensive AirPods.</p><p>I'm here to keep you on track with those prices, so that you know the best time to drop them into your cart. This is my fifth year tracking AirPods deals, and I know what to watch out for — so stick with me.</p><p>There are some great deals out there already. The <a href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow">AirPods Pro 3 are down to their lowest ever price</a>, and the <a href="https://www.amazon.com/dp/B0DGJ7HYG1/" target="_blank" rel="nofollow">AirPods 4 with ANC have some hefty savings too</a>. Here are the best deals on Apple's own earbuds and headphones.</p><h3 class="article-body__section" id="section-quick-links"><span>Quick Links</span></h3><ul><li><strong>AirPods 4 ANC: </strong><a href="https://www.amazon.com/dp/B0DGJ7HYG1/" target="_blank" rel="nofollow"><strong>was $179 now $99 @ Amazon </strong></a><strong></strong></li><li><strong>AirPods Pro 3: </strong><a href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow"><strong>was $249 now $219 @ Amazon</strong></a><strong></strong></li><li><strong>AirPods Max USB-C: </strong><a href="https://www.bestbuy.com/product/apple-airpods-max-usb-c-midnight/JJGCQ3ZZ3Q" target="_blank" rel="nofollow"><strong>was $549 now $484 @ Best Buy</strong></a></li></ul><h3 class="article-body__section" id="section-best-cyber-monday-airpods-deals"><span>Best Cyber Monday Airpods deals</span></h3><div class="product"><a data-dimension112="f1066412-8424-474b-917d-8943e6f7bc71" data-action="Deal Block" data-label="The AirPods 4 with ANC is the model I'd recommend because for just $20 more than the regular AirPods 4 you get active noise cancelation, conversation awareness and wireless charging support. It's a no-brainer at this price." data-dimension48="The AirPods 4 with ANC is the model I'd recommend because for just $20 more than the regular AirPods 4 you get active noise cancelation, conversation awareness and wireless charging support. It's a no-brainer at this price." data-dimension25="$99" href="https://www.amazon.com/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 AirPods 4 with ANC is the model I'd recommend because for just $20 more than the regular AirPods 4 you get active noise cancelation, conversation awareness and wireless charging support. It's a no-brainer at this price. <a class="view-deal button" href="https://www.amazon.com/dp/B0DGJ7HYG1/" target="_blank" rel="nofollow" data-dimension112="f1066412-8424-474b-917d-8943e6f7bc71" data-action="Deal Block" data-label="The AirPods 4 with ANC is the model I'd recommend because for just $20 more than the regular AirPods 4 you get active noise cancelation, conversation awareness and wireless charging support. It's a no-brainer at this price." data-dimension48="The AirPods 4 with ANC is the model I'd recommend because for just $20 more than the regular AirPods 4 you get active noise cancelation, conversation awareness and wireless charging support. It's a no-brainer at this price." data-dimension25="$99">View Deal</a></p></div><div class="product"><a data-dimension112="13338ba2-c113-4341-86a9-3bfa21701fda" data-action="Deal Block" data-label="Price check: $199 @ Amazon" data-dimension48="Price check: $199 @ Amazon" data-dimension25="$199" href="https://www.walmart.com/ip/Apple-AirPods-Pro-2-Wireless-Earbuds-Active-Noise-Cancellation-Hearing-Aid-Feature/5689919121" 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>They might not be as new and shiny as the AirPods Pro 3, but they're still a great option — particularly at this price. They sound great, block out plenty of noise, and offer a great selection of features, some of which shared by the newest model. Six hours of battery keeps them going for a long time.<br><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0CHWRXH8B/" target="_blank" rel="nofollow" data-dimension112="13338ba2-c113-4341-86a9-3bfa21701fda" data-action="Deal Block" data-label="Price check: $199 @ Amazon" data-dimension48="Price check: $199 @ Amazon" data-dimension25="$199"><strong>$199 @ Amazon</strong></a><a class="view-deal button" href="https://www.walmart.com/ip/Apple-AirPods-Pro-2-Wireless-Earbuds-Active-Noise-Cancellation-Hearing-Aid-Feature/5689919121" target="_blank" rel="nofollow" data-dimension112="13338ba2-c113-4341-86a9-3bfa21701fda" data-action="Deal Block" data-label="Price check: $199 @ Amazon" data-dimension48="Price check: $199 @ Amazon" data-dimension25="$199">View Deal</a></p></div><div class="product"><a data-dimension112="10b1438a-a4f4-4455-80a5-e2eaa41fa597" data-action="Deal Block" data-label="The AirPods Pro 3 just got a great Cyber Monday discount, and they offer the best noise cancellation ever for AirPods. Plus, you get up to 8 hours of battery life with ANC on (10 hours in Transparency), heart rate sensing and live translation. But my favorite feature is the comfier redesign." data-dimension48="The AirPods Pro 3 just got a great Cyber Monday discount, and they offer the best noise cancellation ever for AirPods. Plus, you get up to 8 hours of battery life with ANC on (10 hours in Transparency), heart rate sensing and live translation. But my favorite feature is the comfier redesign." data-dimension25="$219" href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 3 just got a great Cyber Monday discount, and they offer the best noise cancellation ever for AirPods. Plus, you get up to 8 hours of battery life with ANC on (10 hours in Transparency), heart rate sensing and live translation. But my favorite feature is the comfier redesign. <a class="view-deal button" href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow" data-dimension112="10b1438a-a4f4-4455-80a5-e2eaa41fa597" data-action="Deal Block" data-label="The AirPods Pro 3 just got a great Cyber Monday discount, and they offer the best noise cancellation ever for AirPods. Plus, you get up to 8 hours of battery life with ANC on (10 hours in Transparency), heart rate sensing and live translation. But my favorite feature is the comfier redesign." data-dimension48="The AirPods Pro 3 just got a great Cyber Monday discount, and they offer the best noise cancellation ever for AirPods. Plus, you get up to 8 hours of battery life with ANC on (10 hours in Transparency), heart rate sensing and live translation. But my favorite feature is the comfier redesign." data-dimension25="$219">View Deal</a></p></div><div class="product"><a data-dimension112="0ef04a2d-6e4c-4813-803a-84a650b11464" data-action="Deal Block" data-label="This deal on the AirPods 4 might not be the best saving, but there are benefits to shopping at B&amp;H Photo. Speedy shipping and excellent customer service is nothing to sniff at. The buds themselves offer Spatial Audio, 5 hours of battery life, and a more open fit." data-dimension48="This deal on the AirPods 4 might not be the best saving, but there are benefits to shopping at B&amp;H Photo. Speedy shipping and excellent customer service is nothing to sniff at. The buds themselves offer Spatial Audio, 5 hours of battery life, and a more open fit." data-dimension25="$169" href="https://www.bhphotovideo.com/c/product/1852457-REG/apple_mxp93ll_a_airpods_4_with_active.html" 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>This deal on the AirPods 4 might not be the best saving, but there are benefits to shopping at B&H Photo. Speedy shipping and excellent customer service is nothing to sniff at. The buds themselves offer Spatial Audio, 5 hours of battery life, and a more open fit.<a class="view-deal button" href="https://www.bhphotovideo.com/c/product/1852457-REG/apple_mxp93ll_a_airpods_4_with_active.html" target="_blank" rel="nofollow" data-dimension112="0ef04a2d-6e4c-4813-803a-84a650b11464" data-action="Deal Block" data-label="This deal on the AirPods 4 might not be the best saving, but there are benefits to shopping at B&amp;H Photo. Speedy shipping and excellent customer service is nothing to sniff at. The buds themselves offer Spatial Audio, 5 hours of battery life, and a more open fit." data-dimension48="This deal on the AirPods 4 might not be the best saving, but there are benefits to shopping at B&amp;H Photo. Speedy shipping and excellent customer service is nothing to sniff at. The buds themselves offer Spatial Audio, 5 hours of battery life, and a more open fit." data-dimension25="$169">View Deal</a></p></div><div class="product"><a data-dimension112="6022c01a-4a85-4061-a711-11a65e8e8d65" data-action="Deal Block" data-label="Expect this price to be lower as Amazon goes to empty its stocks of Pro 2. They're a great earbud option if you don't want to spend top dollar, usually, but at this price, you'll want to wait for their price to go down. ANC, excellent sound and buckets of features await you when that price lowers." data-dimension48="Expect this price to be lower as Amazon goes to empty its stocks of Pro 2. They're a great earbud option if you don't want to spend top dollar, usually, but at this price, you'll want to wait for their price to go down. ANC, excellent sound and buckets of features await you when that price lowers." data-dimension25="$195" href="https://www.amazon.com/dp/B0CHWRXH8B/" 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>Expect this price to be lower as Amazon goes to empty its stocks of Pro 2. They're a great earbud option if you don't want to spend top dollar, usually, but at this price, you'll want to wait for their price to go down. ANC, excellent sound and buckets of features await you when that price lowers.<a class="view-deal button" href="https://www.amazon.com/dp/B0CHWRXH8B/" target="_blank" rel="nofollow" data-dimension112="6022c01a-4a85-4061-a711-11a65e8e8d65" data-action="Deal Block" data-label="Expect this price to be lower as Amazon goes to empty its stocks of Pro 2. They're a great earbud option if you don't want to spend top dollar, usually, but at this price, you'll want to wait for their price to go down. ANC, excellent sound and buckets of features await you when that price lowers." data-dimension48="Expect this price to be lower as Amazon goes to empty its stocks of Pro 2. They're a great earbud option if you don't want to spend top dollar, usually, but at this price, you'll want to wait for their price to go down. ANC, excellent sound and buckets of features await you when that price lowers." data-dimension25="$195">View Deal</a></p></div><div class="product"><a data-dimension112="f7920c0f-57b8-442e-a9cb-6d8607ca2bd7" data-action="Deal Block" data-label="The AirPods Max with USB-C are the headphones to get if you want the ultimate in sound and noise cancellation in one package. You also get a premium design with five color options, personalized Spatial Audio, and a decent 20 hours of battery life." data-dimension48="The AirPods Max with USB-C are the headphones to get if you want the ultimate in sound and noise cancellation in one package. You also get a premium design with five color options, personalized Spatial Audio, and a decent 20 hours of battery life." data-dimension25="$399" href="https://www.bestbuy.com/product/apple-airpods-max-usb-c-midnight/JJGCQ3ZZ3Q" 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="YXPxtrVgnPf6SLRVijpsJi" name="AirPods Max.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YXPxtrVgnPf6SLRVijpsJi.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Max with USB-C are the headphones to get if you want the ultimate in sound and noise cancellation in one package. You also get a premium design with five color options, personalized Spatial Audio, and a decent 20 hours of battery life.<a class="view-deal button" href="https://www.bestbuy.com/product/apple-airpods-max-usb-c-midnight/JJGCQ3ZZ3Q" target="_blank" rel="nofollow" data-dimension112="f7920c0f-57b8-442e-a9cb-6d8607ca2bd7" data-action="Deal Block" data-label="The AirPods Max with USB-C are the headphones to get if you want the ultimate in sound and noise cancellation in one package. You also get a premium design with five color options, personalized Spatial Audio, and a decent 20 hours of battery life." data-dimension48="The AirPods Max with USB-C are the headphones to get if you want the ultimate in sound and noise cancellation in one package. You also get a premium design with five color options, personalized Spatial Audio, and a decent 20 hours of battery life." data-dimension25="$399">View Deal</a></p></div><div class="product"><a data-dimension112="174e33c7-7b71-4e43-b1e5-159940f2855a" data-action="Deal Block" data-label="This deal is very similar to the one found above. It's a solid price for some great headphones, netting you a premium option for a whole lot less. Top-notch ANC, great sound, a comfortable fit and wicked build quality — about the only thing you could really ask for is more battery life." data-dimension48="This deal is very similar to the one found above. It's a solid price for some great headphones, netting you a premium option for a whole lot less. Top-notch ANC, great sound, a comfortable fit and wicked build quality — about the only thing you could really ask for is more battery life." data-dimension25="$484" href="https://www.amazon.com/dp/B0DGJC52FP/" 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="YXPxtrVgnPf6SLRVijpsJi" name="AirPods Max.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/YXPxtrVgnPf6SLRVijpsJi.jpg" mos="" align="middle" fullscreen="" width="1509" height="1509" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>This deal is very similar to the one found above. It's a solid price for some great headphones, netting you a premium option for a whole lot less. Top-notch ANC, great sound, a comfortable fit and wicked build quality — about the only thing you could really ask for is more battery life.<a class="view-deal button" href="https://www.amazon.com/dp/B0DGJC52FP/" target="_blank" rel="nofollow" data-dimension112="174e33c7-7b71-4e43-b1e5-159940f2855a" data-action="Deal Block" data-label="This deal is very similar to the one found above. It's a solid price for some great headphones, netting you a premium option for a whole lot less. Top-notch ANC, great sound, a comfortable fit and wicked build quality — about the only thing you could really ask for is more battery life." data-dimension48="This deal is very similar to the one found above. It's a solid price for some great headphones, netting you a premium option for a whole lot less. Top-notch ANC, great sound, a comfortable fit and wicked build quality — about the only thing you could really ask for is more battery life." data-dimension25="$484">View Deal</a></p></div><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1920px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Q7LZEeQj46Hd3tBS5MiM2b" name="Airpods_pro 3.JPG" alt="A pair of Apple AirPods Pro 3" src="https://cdn.mos.cms.futurecdn.net/Q7LZEeQj46Hd3tBS5MiM2b.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><h2 id="airpods-pro-3-at-their-lowest-ever-price">AirPods Pro 3 at their lowest ever price</h2><p>The AirPods Pro 3 are a great pair of earbuds, only recently released by Apple. This deal brings them down to the de-facto lowest price because its the first price reduction they've ever seen. You'll love their great sound, comfortable fit, and top notch noise canceling — and the battery life is much better than the old model with 10 hours on tap.</p><ul><li><strong>AirPods Pro 3: </strong><a href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow"><strong>was $249 now $219 @ Amazon</strong></a></li></ul><h2 id="airpods-max-back-down-to-their-lowest-price">AirPods Max back down to their lowest price</h2><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="eXrx26ekj8dmZbrFjvMsY" name="AirPods Max USB-C-01-LEDE" alt="The AirPods Max USB-C in a photo studio" src="https://cdn.mos.cms.futurecdn.net/eXrx26ekj8dmZbrFjvMsY.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>AirPods Max prices have been all over the place recently — although Best Buy has come in clutch to bring the price down again to that lovely lowest price ever. That's a $150 discount for one of the best deals of the sale.</p><ul><li><strong>AirPods Max: </strong><a href="https://www.bestbuy.com/product/apple-airpods-max-usb-c-midnight/JJGCQ3ZZ3Q" target="_blank" rel="nofollow"><strong>was $549 now $399 @ Best Buy</strong></a></li></ul><h2 id="airpods-4-with-noise-canceling-reduced">AirPods 4 with noise canceling reduced</h2><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="uKSSLPpfSUmKyg5PvvDumX" name="AirPods 4-1.jpg" alt="AirPods 4 on a table" src="https://cdn.mos.cms.futurecdn.net/uKSSLPpfSUmKyg5PvvDumX.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>While the non-ANC version has disappeared from sale, the noise-canceling version has now become the cheapest way to get some AirPods in your pocket. This is their lowest price ever, and actually slightly less than you can find them elsewhere. Nice one, Amazon.</p><ul><li><strong>AirPods 4 with ANC: was $179 now $99 @ Amazon</strong></li></ul><h2 id="big-beats-deals">Big Beats deals</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1524px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="ZYHxmWCFMjcJ5Dbg6LSYxd" name="Beats Studio Pro.jpg" alt="Beats Studio Pro" src="https://cdn.mos.cms.futurecdn.net/ZYHxmWCFMjcJ5Dbg6LSYxd.jpg" mos="" align="middle" fullscreen="" width="1524" height="857" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Beats)</span></figcaption></figure><p>The Studio Pro are solid headphones, and well worth picking up at the lower price. They've got decent noist canceling, a comfortable fit, and 40 hours of battery life to make sure you're not constantly charging them. This is the their lowest price ever.</p><ul><li><strong>Beats Studio Pro: </strong><a href="https://www.amazon.com/dp/B0FHM61VTK/" target="_blank" rel="nofollow"><strong>was $349 now $149 @ Amazon</strong></a></li></ul><h2 id="more-beats-buds">More Beats buds</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3438px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="Qvqx9DquRKVeoWk3bLCoDM" name="Power Beats Pro 2" alt="Beats Powerbeats Pro 2 in orange in the charging case with the lid open to reveal the earbuds" src="https://cdn.mos.cms.futurecdn.net/Qvqx9DquRKVeoWk3bLCoDM.jpg" mos="" align="middle" fullscreen="" width="3438" height="1934" 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>These Beats buds are the perfect pair for someone looking for secure earbuds for exercise. They're comfortable, the helpful hooks keep them in place, and the sound and ANC are sure to keep out the sound of a busy gym or the road that you're running alonside. This is their lowest price ever.</p><ul><li><strong>Beats Powerbeats Pro 2: </strong><a href="https://www.amazon.com/dp/B0DT2344N3/" target="_blank" rel="nofollow"><strong>was $249 now $199 @ Amazon</strong></a></li></ul><h2 id="cheaper-alternatives-to-airpods">Cheaper alternatives to Airpods</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:1200px;"><p class="vanilla-image-block" style="padding-top:56.25%;"><img id="y5xM6NzcoJNFnf3Fu7XF7X" name="Soundcore P30i" alt="Soundcore P30i" src="https://cdn.mos.cms.futurecdn.net/v2/t:576,l:0,cw:1200,ch:675,q:80/y5xM6NzcoJNFnf3Fu7XF7X.png" mos="" align="middle" fullscreen="" width="1200" height="1500" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Soundcore)</span></figcaption></figure><p>These little earbuds look like AirPods, but they're a great budget pair from Soundcore instead. They've got 45 hours of battery and customizable sound. You can even use the case as a kind of make-shift iPhone stand, if you'd like. This deal makes the buds half price.</p><ul><li><strong>Soundcore P30i: </strong><a href="https://www.amazon.com/dp/B0CRTN7C8C/" target="_blank" rel="nofollow"><strong>was $49 now $24 @ Amazon</strong></a></li></ul><h2 id="further-bose-savings">Further Bose savings</h2><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="4EuSKxY4xk7PNJ2Bh5bcsG" name="TG_Bose-QC-Headphones-vs-Bose-700_7.jpg" alt="Reviewer testing ANC performance on QC Headphones outside" src="https://cdn.mos.cms.futurecdn.net/4EuSKxY4xk7PNJ2Bh5bcsG.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 Bose QuietComfort Headphones, at this price, are inmissable. Nothing else. Just buy them — they're not going to get any cheaper than this.</p><ul><li><strong>Bose QuietComfort headphones: </strong><a href="https://www.amazon.com/dp/B0DZHR44J9/" target="_blank" rel="nofollow"><strong>was $349 now $179 @ Amazon</strong></a></li></ul><h2 id="airpods-pro-2-save-a-little-on-some-great-buds">AirPods Pro 2 — save a little on some great buds</h2><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="cUWU6bar27yvNBPiUvUjLE" name="AirPods Pro 2.jpg" alt="AirPods Pro 2 in charging case" src="https://cdn.mos.cms.futurecdn.net/cUWU6bar27yvNBPiUvUjLE.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 AirPods Pro 2 have been more reduced over the last few days, but they're actually out of stock at the place they were cheapest. This deal is the next best thing, making them a little cheaper than the AirPods Pro 3 – and they're still a great option, with solid ANC, good sound, and decent battery life.</p><ul><li><strong>AirPods Pro 2: </strong><a href="https://www.amazon.com/dp/B0D1XD1ZV3/" target="_blank" rel="nofollow"><strong>was $249 now $189 @ Amazon</strong></a></li></ul><h2 id="cheap-over-ear-alternatives">Cheap over-ear alternatives</h2><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="V6J7maKNawgAUdG7c4wX2U" name="JLab_JBudsLux_03.JPG" alt="the jlab jbuds lux anc headphones in black photographed against a blue background" src="https://cdn.mos.cms.futurecdn.net/V6J7maKNawgAUdG7c4wX2U.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>These light and portable folding ANC headphones are super cheap in the Cyber Monday sales. They might not have the shiny white luster of a pair of AirPods, but they're sure to win you over with their comfortable fit, great sound, and Solid ANC. That and you get like, four pairs for the same price as AirPods Pro 3. With some cash for a nice coffee left over.</p><ul><li><strong>JLab JBuds Lux: </strong><a href="https://www.amazon.com/dp/B0CRLXZ5J6/" target="_blank" rel="nofollow"><strong>was $79 now $39 @ Amazon</strong></a></li></ul><h2 id="something-wired">Something wired...</h2><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="mNPCGx8PY6oztZwTp2djjH" name="AirPods deals" alt="AirPods deals" src="https://cdn.mos.cms.futurecdn.net/mNPCGx8PY6oztZwTp2djjH.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: Apple, Tom's Guide)</span></figcaption></figure><p>The EarPods are what we <em>used </em>to get with iPhones and other devices before Apple pulled them the box. But you can still buy them seperately, and they're a good way to get decent sound from your phone. The microphone is also much better than just about anything wireless.</p><ul><li><strong>Apple EarPods: </strong><a href="https://www.amazon.com/dp/B0DCH8VDXF/" target="_blank" rel="nofollow"><strong>was $19 now $16 @ Amazon</strong></a></li></ul><h2 id="cheap-competitors-from-samsung">Cheap competitors from Samsung</h2><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="jcjTMPHyBrUPUjk4hv4Sdk" name="TG_Samsung-Galax-Buds-FE_2.jpg" alt="Samsung Galaxy Buds FE wireless earbuds held in the hand." src="https://cdn.mos.cms.futurecdn.net/jcjTMPHyBrUPUjk4hv4Sdk.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 the AirPods 4 now completely sold out pretty much every where, there's a whole load of options that cost about the same. The Samsung Galaxy buds FE are a good alternative, especially if you wield a Samsung handset. This is only $5 off their lowest ever price.</p><ul><li><strong>Samsung Galaxy Buds FE: </strong><a href="https://www.amazon.com/dp/B0CF7GYNW2/" target="_blank" rel="nofollow"><strong>was $99 now $59 @ Amazon</strong></a></li></ul><h2 id="airpods-pro-3-alternatives-with-better-anc">AirPods Pro 3 alternatives — with better ANC</h2><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="BGEZwswKFrCXBQ2hyK6ecM" name="Bose_QuietComfort_Earbuds_ 6.JPG" alt="A pair of chilled lilac Bose QuietComfort Earbuds (2024)" src="https://cdn.mos.cms.futurecdn.net/BGEZwswKFrCXBQ2hyK6ecM.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>The Bose QuietComfort Earbuds cost less than the AirPods Pro 3, and they block out more noise. They sound good, offer great battery, and come in far more colors than a simple pink. These are excellent buds with some excellent features.</p><ul><li><strong>Bose QuietComfort Earbuds: </strong><a href="https://www.amazon.com/dp/B0DZHQHDWR/" target="_blank" rel="nofollow"><strong>was $179 now $129 @ Amazon</strong></a></li></ul><h2 id="more-cheap-airpods-alternatives">More cheap AirPods alternatives</h2><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="7Q8pMUVxFS8x4EcrBsae4n" name="TG_Anker-Soundcore-Space-One_11.jpg" alt="Review listing image for Anker Soundcore Space One in blue" src="https://cdn.mos.cms.futurecdn.net/7Q8pMUVxFS8x4EcrBsae4n.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 pair of over ear headphones is a cheap alternative to the AirPods Max, providing excellent comfort and great sound. This $33 deal brings them down to an even more manageable price, and makes that 40 hours of battery life taste all the better. Just be aware that only some of the colors are reduced.</p><ul><li><strong>Soundcore Space One: </strong><a href="https://www.amazon.com/dp/B0C6KFZC9Z/" target="_blank" rel="nofollow"><strong>was $99 now $67 @ Amazon</strong></a></li></ul><h2 id="sony-s-competitor-enters-the-fray">Sony's competitor enters the fray</h2><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="wpewt9kEWv9wZKy43fkq2D" name="Sony WH-1000XM6--13" alt="A woman wearing white Sony WH-1000XM6 noise-cancelling headphones" src="https://cdn.mos.cms.futurecdn.net/wpewt9kEWv9wZKy43fkq2D.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>Sony's latest noise canceling headphones are a great alternative to the AirPods Max. They block out even noise, and they're comparable sound wise. Even better is the battery, with 10 more hours on tap than Apple's cans. This deal brings them down to their lowest price ever, and makes then $1 cheaper than the AirPods Max at their deal price.</p><ul><li><strong>Sony WH-1000XM6: </strong><a href="https://www.amazon.com/dp/B0F3PT1VBL?" target="_blank" rel="nofollow"><strong>was $459 now $398 @ Amazon</strong></a></li></ul><h2 id="best-buy-drops-airpods-4-price">Best Buy drops Airpods 4 price</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3667px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="UMXRo3jZ6wo7vr4PP9HA8Z" name="IMG_7864.jpg" alt="AirPods 4" src="https://cdn.mos.cms.futurecdn.net/UMXRo3jZ6wo7vr4PP9HA8Z.jpg" mos="" align="middle" fullscreen="" width="3667" height="2063" 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 AirPods deal of the sale is <em>almost </em>back — you can now pick up some AirPods 4 for as little as $79 at Best Buy. They're the cheapest way to get some AirPods in your pocket right now, and thanks to a tiny case, also the most compact. So they might actually fit in there.</p><ul><li><strong>AirPods 4: </strong><a href="https://www.bestbuy.com/product/apple-airpods-4-white/JJGCQ83JQ5" target="_blank" rel="nofollow"><strong>was $129 now $79 @ Best Buy</strong></a></li></ul><h2 id="apple-airpods-pro-2-drop-to-199-at-walmart">Apple AirPods Pro 2 drop to $199 at Walmart</h2><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="kDVcZZuH3t2zmXZAsbfErM" name="TG-Apple-AirPods-Pro-2-concept-2.jpg" alt="Apple AirPods Pro 2 concept image" src="https://cdn.mos.cms.futurecdn.net/kDVcZZuH3t2zmXZAsbfErM.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: Konstantin Milenin/Yanko Design)</span></figcaption></figure><p>AirPods Pro 2 are just $199 right now at Walmart, with great ANC and sound and decent battery life, they're a great option if you want to spend less and don't fancy the Pro 3s just yet.</p><ul><li><strong>Apple AirPods Pro 2: </strong><a href="https://www.walmart.com/ip/Apple-AirPods-Pro-2-Wireless-Earbuds-Active-Noise-Cancellation-Hearing-Aid-Feature/5689919121" target="_blank" rel="nofollow"><strong>now $199 at Walmart</strong></a></li></ul><h2 id="an-alternative-to-airpods-from-beats-at-just-169">An alternative to AirPods from Beats at just $169</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:822px;"><p class="vanilla-image-block" style="padding-top:56.33%;"><img id="7HwzbRxwFyhY8GfMESzXXW" name="beats" alt="Beats Studio Pro black and gold" src="https://cdn.mos.cms.futurecdn.net/7HwzbRxwFyhY8GfMESzXXW.jpg" mos="" align="middle" fullscreen="" width="822" height="463" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Best Buy/ Beats)</span></figcaption></figure><p>Beats Studio Pro now just $169 at Amazon, which is over 50% off. These over-ear headphones have dynamic head trackin and acoustic platform which delivers rich, immersive sound. There's also two distinct listening modes: fully-adaptive Active Noise Cancelling (ANC) and Transparency mode.</p><ul><li><strong>Beats Studio Pro: </strong><a href="https://www.amazon.com/Beats-Studio-Pro-Personalized-Compatibility/dp/B0C8PR4W22" target="_blank" rel="nofollow"><strong>was $349 now $169</strong></a></li></ul><h2 id="jbl-fans-can-now-save-even-more-during-cyber-monday-with-40-off">JBL fans can now save even more during Cyber Monday with 40% off...</h2><figure class="van-image-figure  inline-layout" data-bordeaux-image-check ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:3276px;"><p class="vanilla-image-block" style="padding-top:56.26%;"><img id="fMecuQGZGoB8UGQi7gsye8" name="JBL vibe beam.jpg" alt="The JBL Vibe Beam sitting on a lunch bag" src="https://cdn.mos.cms.futurecdn.net/fMecuQGZGoB8UGQi7gsye8.jpg" mos="" align="middle" fullscreen="" width="3276" height="1843" attribution="" endorsement="" class=""></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 JBL Vibe Beams are just $29, making them the perfect affordable alternative to invest in. You get high-quality audio from these secure little buds with JBL Deep Bass Sound. The closed design helps to exclude external sounds and enhance the bass performance. Plus, up to 32 hours of battery life and super speedy charging means you can listen through these bad boys all day.</p><ul><li><strong>JBL Vibe Beams: </strong><a href="https://www.amazon.com/JBL-Vibe-Beam-Wireless-Headphones/dp/B0BQPNMXQV/" target="_blank" rel="nofollow"><strong>was $49 now $29 @ Amazon</strong></a></li></ul><h2 id="why-the-airpods-pro-2">Why the AirPods Pro 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="DyRXRKibiQy4ZS3DBk7Q2F" name="AirPods Pro 2" alt="AirPods Pro 2 in hand" src="https://cdn.mos.cms.futurecdn.net/DyRXRKibiQy4ZS3DBk7Q2F.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 many<a href="https://www.tomsguide.com/feature/5-reasons-why-the-airpods-pro-2-are-a-better-value-than-the-airpods-pro-3"> reasons to choose the AirPods Pro 2</a>. According to our testers, the ANC on the AirPods Pro 2 is just as effective as the 3s. Plus, Apple’s transparency mode and all other optional listening modes (e.g., Adaptive Audio, Hearing Aid) sound equally great on both models, so why not save some cash? </p><p>Besides, both the 2 and 3 share many core features like Spatial Audio and MagSafe charging, and the Pro 2s felt more comfortable to wear for long periods. And right now? Affordability without a total sacrifice on quality is so important with the cost of living. With this model, you don't give up quality just to save.</p><ul><li><strong>Apple AirPods Pro 2: </strong><a href="https://www.amazon.com/Apple-Cancellation-Transparency-Personalized-High-Fidelity/dp/B0D1XD1ZV3" target="_blank" rel="nofollow"><strong>was $249 now $189</strong></a></li></ul><h2 id="51-off-cleaner-kit-for-airpods-pro-1-2-3">51% off cleaner kit for AirPods Pro 1, 2, 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:2632px;"><p class="vanilla-image-block" style="padding-top:56.23%;"><img id="YESbQkh3vQa9kZfAAmnyng" name="cleaning kit" alt="Cleaning kit for AirPods white" src="https://cdn.mos.cms.futurecdn.net/YESbQkh3vQa9kZfAAmnyng.jpg" mos="" align="middle" fullscreen="" width="2632" height="1480" attribution="" endorsement="" class=""></p></div></div><figcaption itemprop="caption description" class=" inline-layout"><span class="credit" itemprop="copyrightHolder">(Image credit: Apple/ Amazon/ Hyashee)</span></figcaption></figure><p>Grabbing a great deal on earphones is one thing, but keeping them in good condition is another. The multi-function cleaning kit is a 3-in-1 solution with a flocking sponge, soft brush and metal pen tip, so it's easy to clean the dust, grit, or stubborn dirt out of your AirPods and keep them looking brand-spanking new.</p><ul><li><strong>Hyashee cleaning kit AirPods: </strong><a href="https://www.amazon.com/Multi-Function-Cleaning-Bluetooth-Earphones-Headphones/dp/B09QRPDQWR/" target="_blank" rel="nofollow"><strong>was $12 now $6</strong></a></li></ul>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Not a typo! AirPods 4 just crashed to $69 in epic Black Friday deal ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/not-a-typo-airpods-4-dropped-to-just-usd69-in-an-epic-black-friday-deal</link>
                                                                            <description>
                            <![CDATA[ The AirPods 4 just hit another lowest price ever this Black Friday with a $60 discount at Walmart. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">QSgWsVvXR9mUghbTJ5xwfC</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/uinAQicQ5SL3g9r7y2cdQ7-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 25 Nov 2025 10:46:17 +0000</pubDate>                                                                                                                                <updated>Tue, 25 Nov 2025 15:30:32 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/uinAQicQ5SL3g9r7y2cdQ7-1280-80.jpg">
                                                            <media:credit><![CDATA[Amazon]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods 4 deal]]></media:description>                                                            <media:text><![CDATA[AirPods 4 deal]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods 4 deal]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/uinAQicQ5SL3g9r7y2cdQ7-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Over the <a href="https://www.tomsguide.com/live/news/best-black-friday-deals-sales-picked-by-experts">Black Friday</a> period, we've seen the AirPods 4 drop to some great prices. First, we saw them go down to $89. That's a good price. Then, they dropped to $79. That's a great price.</p><p>Now, the <a href="https://www.walmart.com/ip/Apple-AirPods-4/11381374703" target="_blank" rel="nofollow">AirPods 4 are $69 at Walmart</a>. That's an unbeatable price and a full $10 cheaper than their previous lowest price. In fact, they're only $5 off being half price — although I'm not sure they'll drop any lower. Pretty soon, retailers will be giving them away.</p><div class="product star-deal"><a data-dimension112="2345c59f-674c-486a-8cfc-6dff782d9ad3" data-action="Star Deal Block" data-label="the review" data-dimension48="the review" data-dimension25="$69" href="https://www.walmart.com/ip/Apple-AirPods-4/11381374703" 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 AirPods 4 offer some great features for iPhone users. We liked their Spatial Audio and comfortable fit in <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review" data-dimension112="2345c59f-674c-486a-8cfc-6dff782d9ad3" data-action="Star Deal Block" data-label="the review" data-dimension48="the review" data-dimension25="$69">the review</a>, and the 30 hours of case battery is plenty. 5 hours of bud battery isn't quite as good, though. This is the bud's lowest ever price, thanks to a massive $60 saving.</p><p><strong>Price Check: </strong><a href="https://www.amazon.com/dp/B0DGHMNQ5Z/ref=fs_a_mdt2_us3" target="_blank" rel="nofollow"><strong>$69 @ Amazon</strong></a><a class="view-deal button" href="https://www.walmart.com/ip/Apple-AirPods-4/11381374703" target="_blank" rel="nofollow" data-dimension112="2345c59f-674c-486a-8cfc-6dff782d9ad3" data-action="Star Deal Block" data-label="the review" data-dimension48="the review" data-dimension25="$69">View Deal</a></p></div><p>The <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4</a> are some of Apple's more comfortable earbuds. They've got a 'barely there' feel thanks to their lack of silicon eartips, something that some users appreciate. They don't feature ANC, though, so if you want to block out the sound of your commute, you're better off with the more expensive noise-canceling-equipped model.</p><p>Their five-hour battery life isn't quite up to scratch, but that gets extended when you pop them back in their charging case — there's 30 hours on offer in there. </p><p>Our tester, Kate, loved the Spatial Audio of the AirPods 4 when she reviewed them, particularly the head tracking that makes sound feel like it's all around you. Sound is good overall, although there are some slight bass misgivings thanks to their more open design.</p><p>This deal is the largest saving we've ever seen on the AirPods 4, making them a must-buy this Black Friday.</p><p><em>For more discounts, check out our </em><a href="https://www.tomsguide.com/live/news/amazon-black-friday-2025-lego-yeti-dyson"><em>Amazon Black Friday deals live blog</em></a><em> and our main </em><a href="https://www.tomsguide.com/live/news/ive-been-covering-black-friday-deals-for-18-years-my-top-picks"><em>Black Friday deals live blog</em></a><em>.</em></p><h3 class="article-body__section" id="section-shop-today-s-best-black-friday-deals"><span>Shop today's best Black Friday deals</span></h3><ul><li><strong>Amazon: </strong><a href="https://www.amazon.com/b?node=210998206011" target="_blank" rel="nofollow"><strong>50% off Ring, Ninja, AirPods and more</strong></a><strong></strong></li><li><strong>Walmart Plus: </strong><a href="https://www.walmart.com/plus" target="_blank" rel="nofollow"><strong>50% off @ Walmart</strong></a></li><li><strong>REI: </strong><a href="https://www.rei.com/f/scd-deals" target="_blank" rel="nofollow"><strong>half-off Arc'teryx, Patagonia, more</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 $299</strong></a><strong></strong></li><li><strong>Nectar: </strong><a href="https://www.nectarsleep.com/" target="_blank" rel="nofollow"><strong>50% off mattresses + 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 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>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>Newegg: </strong><a href="https://www.newegg.com/Black-November-Early-Access/EventSaleStore/ID-1132" target="_blank" rel="nofollow"><strong>Doorbuster deals from $6</strong></a></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></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[ AirPods 4 with ANC just hit lowest price ever at $99 — this is the Black Friday deal I'd snag now  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/airpods-4-with-anc-just-hit-lowest-price-ever-at-usd99-this-is-the-black-friday-deal-id-snag-now</link>
                                                                            <description>
                            <![CDATA[ The AirPods 4 are down to their lowest price ever ahead of Black Friday. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">2KtbBWghdbdgoyRXPLTk8c</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/kN8PkbYSqsxDarYgWCWdQV-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Sun, 23 Nov 2025 17:00:20 +0000</pubDate>                                                                                                                                <updated>Sun, 23 Nov 2025 17:09:31 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/kN8PkbYSqsxDarYgWCWdQV-1280-80.jpg">
                                                            <media:credit><![CDATA[Future/Apple]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods 4 with ANC deal]]></media:description>                                                            <media:text><![CDATA[AirPods 4 with ANC deal]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods 4 with ANC deal]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/kN8PkbYSqsxDarYgWCWdQV-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>Yes, the regular <a href="https://www.amazon.com/Apple-Bluetooth-Headphones-Personalized-Effortless/dp/B0DGHMNQ5Z?ref_=ast_sto_dp" target="_blank" rel="nofollow">AirPods 4 are just $79 at Amazon right now</a> (down from $129), but I've found a better <a href="https://www.tomsguide.com/black-friday-deals-and-sales">Black Friday deal</a>. The AirPods 4 with ANC give you active noise cancellation for blocking out unwanted sounds, a Conversation Awareness mode to make sure you don't miss anything important and wireless charging support for its charging case.</p><p>Right now, the <a href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJ7HYG1" target="_blank" rel="nofollow">AirPods 4 with ANC for $99 at Amazon</a> is the <a href="https://www.tomsguide.com/audio/airpods/black-friday-airpods-deals-up-to-usd100-off-airpods-pro-2-pro-3-airpods-4-and-more">Black Friday AirPods deal</a> we'd get with our own money. That's $80 off and the lowest price ever for these earbuds. </p><div class="product"><a data-dimension112="8c2b4cad-2ab7-485a-b525-9a1aa5ff4079" data-action="Deal Block" data-label="4 stars" data-dimension48="4 stars" data-dimension25="$99" 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:1000px;"><p class="vanilla-image-block" style="padding-top:120.00%;"><img id="kTKCG8gCBjg4vScr6CMgoN" name="AirPods 4 BG image.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/kTKCG8gCBjg4vScr6CMgoN.jpg" mos="" align="middle" fullscreen="" width="1000" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods 4 are a very solid earbud option if you're an iPhone user who doesn't want to spend a lot on the AirPods Pro. We loved the AirPods 4 in our review, rating them <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review" data-dimension112="8c2b4cad-2ab7-485a-b525-9a1aa5ff4079" data-action="Deal Block" data-label="4 stars" data-dimension48="4 stars" data-dimension25="$99">4 stars</a>. We particularly like the active noise cancellation performance, comfortable fit and  great Spatial Audio with Apple Music. They last for five hours on a charge but up to 30 hours with the charging case. <a class="view-deal button" href="https://www.amazon.com/Apple-Headphones-Cancellation-Transparency-Personalized/dp/B0DGJ7HYG1" target="_blank" rel="nofollow" data-dimension112="8c2b4cad-2ab7-485a-b525-9a1aa5ff4079" data-action="Deal Block" data-label="4 stars" data-dimension48="4 stars" data-dimension25="$99">View Deal</a></p></div><p>In our <a href="https://www.tomsguide.com/audio/earbuds/apple-airpods-4-review">AirPods 4 review</a> we praised these earbuds for offering "pro-level features for less." This includes effective noise cancellation when you're on the go, as well as <a href="https://www.tomsguide.com/how-to/how-to-enable-airpods-conversation-awareness-iphone">Conversational Awareness</a>. So if someone starts talking to you you'll be able to hear them without touch the AirPods.</p><p>The AirPods 4 design is pretty comfortable, too. Here's what our reviewer Kate Kozuch had to say about the fit: " I found the AirPods 4 comfortable to wear for long periods of time.  I will say the AirPods 4 did shift a bit in my ear when I wore them on a cross-country flight, so I just had to adjust them occasionally to retain a secure fit. But overall, it felt like they were barely there."</p><p>Other highlights of the AirPods 4 include Personalized Spatial Audio and Head Gestures support, so you can answer or decline calls just by shaking your head.</p><p>The AirPods 4 battery life could be better at 5 hours, but the charging case adds 30 hours of endurance. Even better, unlike the regular AirPods 4, this model offers wireless charging. And if you misplace your AirPods, the case offers Find My Support so you can easily track them down.</p><p>Overall, for $99 you're not going to find a better Black Friday AirPods deal. For more discounts, check out our <a href="https://www.tomsguide.com/live/news/black-friday-deals-ultimate-guide-my-top-picks-2025">Black Friday deals live blog</a>. </p><h3 class="article-body__section" id="section-shop-today-s-best-black-friday-deals"><span>Shop today's best Black Friday deals</span></h3><ul><li><strong>Amazon: </strong><a href="https://www.amazon.com/b?node=210998206011" target="_blank" rel="nofollow"><strong>50% off Ring, Ninja, AirPods and more</strong></a><strong></strong></li><li><strong>Walmart Plus: </strong><a href="https://www.walmart.com/plus" target="_blank" rel="nofollow"><strong>50% off @ Walmart</strong></a></li><li><strong>REI: </strong><a href="https://www.rei.com/f/scd-deals" target="_blank" rel="nofollow"><strong>half-off Arc'teryx, Patagonia, more</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 $299</strong></a><strong></strong></li><li><strong>Nectar: </strong><a href="https://www.nectarsleep.com/" target="_blank" rel="nofollow"><strong>50% off mattresses + 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 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>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>Newegg: </strong><a href="https://www.newegg.com/Black-November-Early-Access/EventSaleStore/ID-1132" target="_blank" rel="nofollow"><strong>Doorbuster deals from $6</strong></a></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></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[ The first real AirPods Pro 3 discount is here before Black Friday  ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/hurry-airpods-pro-3-just-got-their-first-big-discount-thanks-to-this-early-black-friday-deal</link>
                                                                            <description>
                            <![CDATA[ The AirPods Pro 3 just got their first discount thanks to the Best Buy Black Friday sales. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">oGy5YKQ327RZAK9MVve3Zc</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/tNNi37WDwStwZXhPm9moaG-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Thu, 20 Nov 2025 14:52:01 +0000</pubDate>                                                                                                                                <updated>Thu, 20 Nov 2025 18:56:45 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/tNNi37WDwStwZXhPm9moaG-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 3]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 3]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 3]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/tNNi37WDwStwZXhPm9moaG-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The AirPods Pro 3 feature a whole suite of upgrades over the previous model. They've got a new shape for an improved fit, an enhanced sound signature that brings some bass and improved ANC to help them block out even more noise. And if you've been waiting for <a href="https://www.tomsguide.com/uk/black-friday-deals-and-sales">Black Friday deals</a> we have good news. </p><p>Right now you can buy the <a href="https://www.bestbuy.com/product/apple-airpods-pro-3-wireless-active-noise-cancelling-earbuds-with-heart-rate-sensing-feature-white/JJGCQLYK5F" target="_blank" rel="nofollow">AirPods Pro 3 for just $219 at Best Buy</a>, which is $30 off. That might not sound like much, but it's the biggest discount we've seen on the buds, and a welcome price drop for something so new.</p><div class="product"><a data-dimension112="51b9443f-93f8-4b3e-a47c-a26096db1043" data-action="Deal Block" data-label="Price check: $219 @ Amazon" data-dimension48="Price check: $219 @ Amazon" data-dimension25="$219" href="https://www.bestbuy.com/product/apple-airpods-pro-3-wireless-active-noise-cancelling-earbuds-with-heart-rate-sensing-feature-white/JJGCQLYK5F" target="_blank" rel="nofollow"><figure class="van-image-figure "  ><div class='image-full-width-wrapper'><div class='image-widthsetter' style="max-width:842px;"><p class="vanilla-image-block" style="padding-top:100.00%;"><img id="FYzcjQSdtuwidVacXmMNL5" name="AirPods Pro 3.jpg" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/FYzcjQSdtuwidVacXmMNL5.jpg" mos="" align="middle" fullscreen="" width="842" height="842" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Pro 3 step it up over the previous model. 8 hours of battery, improved ANC, and a new fit to make them more secure. This is their lowest price ever, and marks their first proper discount since they were released.</p><p><strong>Price check: </strong><a href="https://www.amazon.com/dp/B0FQFB8FMG/" target="_blank" rel="nofollow" data-dimension112="51b9443f-93f8-4b3e-a47c-a26096db1043" data-action="Deal Block" data-label="Price check: $219 @ Amazon" data-dimension48="Price check: $219 @ Amazon" data-dimension25="$219"><strong>$219 @ Amazon</strong></a><strong> | </strong><a href="https://www.walmart.com/ip/AirPods-nbsp-Pro-nbsp-3/17835006350?classType=REGULAR&athbdg=L1200&from=/search" target="_blank" rel="nofollow"><strong>$219 @ Walmart</strong></a><a class="view-deal button" href="https://www.bestbuy.com/product/apple-airpods-pro-3-wireless-active-noise-cancelling-earbuds-with-heart-rate-sensing-feature-white/JJGCQLYK5F" target="_blank" rel="nofollow" data-dimension112="51b9443f-93f8-4b3e-a47c-a26096db1043" data-action="Deal Block" data-label="Price check: $219 @ Amazon" data-dimension48="Price check: $219 @ Amazon" data-dimension25="$219">View Deal</a></p></div><ul><li><strong>Earbuds deals: </strong><a href="https://www.bestbuy.com/site/promo/headphone-and-speaker-deals" target="_blank" rel="nofollow"><strong>Best Buy</strong></a><strong> | </strong><a href="https://www.walmart.com/browse/electronics/shop-headphones-by-type/3944_133251_1095191_1230614?sort=best_match&cat_id=3944_133251_1095191_1230614_1230476&stores=3081&ps=40" target="_blank" rel="nofollow"><strong>Walmart</strong></a><strong> | </strong><a href="https://www.amazon.com/s?k=earbuds&crid=2RWE1G9N1EIF&sprefix=earbuds%2Caps%2C161&ref=nb_sb_noss_1" target="_blank" rel="nofollow"><strong>Amazon</strong></a><strong> | </strong><a href="https://www.samsung.com/us/mobile/audio/all-audio/" target="_blank" rel="nofollow"><strong>Samsung</strong></a><strong> | </strong><a href="https://www.dell.com/en-us/search/earbuds" target="_blank" rel="nofollow"><strong>Dell</strong></a></li></ul><p>The <a href="https://www.tomsguide.com/audio/airpods/apple-airpods-pro-3-review">AirPods Pro 3</a> are the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html" target="_blank" rel="nofollow">best wireless earbuds</a> for Apple users without a shadow of a doubt. They sound great and offer great ANC, but the way they connect with your Apple devices remains one of life's great joys. Just connect them to your phone, and they link up with your Apple account — anything you're logged into that supports AirPods now links up to your earbuds without a settings menu or pairing mode in sight. </p><p>I've found the new fit to be more comfortable for my larger ears, although people with smaller ears may not like the new shape as much. Thankfully, there are XS fitting options in the box to make them fit better for everyone.</p><p>8 hours of ANC battery is 2 hours more than the old model, and you can extend that to 10 hours if you put them in transparency mode. That's perfect if you're planning to use the AirPods Hearing Aid feature for longer periods of time.</p><p>This deal brings the earbuds down to their lowest price ever. Given how new they are it's unlikely we'll see them drop lower — so grab them while they're hot!</p><p><em>For more discounts, check out our </em><a href="https://www.tomsguide.com/live/news/amazon-black-friday-2025-lego-yeti-dyson"><em>Amazon Black Friday deals live blog</em></a><em> and our main </em><a href="https://www.tomsguide.com/live/news/ive-been-covering-black-friday-deals-for-18-years-my-top-picks"><em>Black Friday deals live blog</em></a><em>.</em></p><h3 class="article-body__section" id="section-shop-today-s-best-black-friday-deals"><span>Shop today's best Black Friday deals</span></h3><ul><li><strong>Amazon: </strong><a href="https://www.amazon.com/b?node=210998206011" target="_blank" rel="nofollow"><strong>50% off Ring, Ninja, AirPods and more</strong></a><strong></strong></li><li><strong>Walmart Plus: </strong><a href="https://www.walmart.com/plus" target="_blank" rel="nofollow"><strong>50% off @ Walmart</strong></a></li><li><strong>REI: </strong><a href="https://www.rei.com/f/scd-deals" target="_blank" rel="nofollow"><strong>half-off Arc'teryx, Patagonia, more</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 $299</strong></a><strong></strong></li><li><strong>Nectar: </strong><a href="https://www.nectarsleep.com/" target="_blank" rel="nofollow"><strong>50% off mattresses + 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 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>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>Newegg: </strong><a href="https://www.newegg.com/Black-November-Early-Access/EventSaleStore/ID-1132" target="_blank" rel="nofollow"><strong>Doorbuster deals from $6</strong></a></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></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[ Hurry! AirPods Max are already $80 off, and Black Friday hasn't even started yet ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/hurry-airpods-max-are-already-usd80-off-and-black-friday-hasnt-even-started-yet</link>
                                                                            <description>
                            <![CDATA[ The AirPods Max just crashed to a great deal price in this deal — and Black Friday hasn't even kicked into gear yet. ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">qgTmrSGGZH9EL4URCAUszd</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/FiGdTs6DkWq4U6WTGoApcE-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Tue, 18 Nov 2025 10:49:34 +0000</pubDate>                                                                                                                                                                                                                                <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></category>
                                                                                                                    <dc:creator><![CDATA[ Tammy Rogers ]]></dc:creator>                                                                                    <dc:source><![CDATA[ https://cdn.mos.cms.futurecdn.net/n8MswK9ZvXC9mSb5incU44.jpg ]]></dc:source>
                                                                <dc:description><![CDATA[ &lt;p&gt;Tammy and her generous collection of headphones have found a new home — Tom&#039;s Guide! After a two-and-a-half-year stint as iMore&#039;s resident audiophile, Tammy&#039;s reviews and buying guide expertise have more focus than ever on Tom&#039;s Guide, helping buyers find the audio gear that works best for them. Tammy has worked with some of the most desirable audio brands on the planet in her time writing about headphones, speakers, and more, bringing a consumer focussed approach to critique and buying advice. Away from her desk, you&#039;ll probably find her in the countryside writing (extremely bad) poetry, or putting her screenwriting Masters to good use creating screenplays that&#039;ll never see the light of day.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/FiGdTs6DkWq4U6WTGoApcE-1280-80.jpg">
                                                            <media:credit><![CDATA[Tom&#039;s Guide]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Max]]></media:description>                                                            <media:text><![CDATA[AirPods Max]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Max]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/FiGdTs6DkWq4U6WTGoApcE-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>The Airpods Max are not young, but they somehow still keep up with the competition — perhaps that's why Apple hasn't yet made a new version? They're still some of the most expensive flagship headphones around, so getting hold of a pair can really sting the wallet.</p><p>Not now, at least. Or they'll sting the wallet <em>a little less</em>. You can currently pick up the <a href="https://www.amazon.com/dp/B0DGJC52FP/?th=1" target="_blank" rel="nofollow">AirPods Max for $479 at Amazon</a> thanks to an $80 discount. Not quite their lowest price ever, but a solid deal to help you get a pair for cheaper.</p><div class="product"><a data-dimension112="271af60f-cee9-4cac-8784-a7da5cea4ce1" data-action="Deal Block" data-label="The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours." data-dimension48="The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours." data-dimension25="$479" href="https://www.amazon.com/dp/B0DGJC52FP/?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="J2MHuaSPwcbchpdd5EwcXU" name="AirPods Max USB-C" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/J2MHuaSPwcbchpdd5EwcXU.jpg" mos="" align="middle" fullscreen="" width="1000" height="1200" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours.<a class="view-deal button" href="https://www.amazon.com/dp/B0DGJC52FP/?th=1" target="_blank" rel="nofollow" data-dimension112="271af60f-cee9-4cac-8784-a7da5cea4ce1" data-action="Deal Block" data-label="The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours." data-dimension48="The AirPods Max, despite their age, are a great pair of headphones. They sound excellent, they're very comfortable, and pack in some helpful features for Apple users. I only wish they lasted for longer than 20 hours." data-dimension25="$479">View Deal</a></p></div><p>The <a href="https://www.tomsguide.com/reviews/apple-airpods-max">AirPods Max</a> are a premium pair of headphones; no doubt about it. From the moment you pull them from their box, you'll notice their heft. That's thanks to the metal all-over construction, from the stainless steel sliders and aluminum earcups. They're weighty, but they feel more expensive than just about anything else you might put on your head.</p><p>Despite that weight, though, they're still comfortable. The headband is springy and doesn't rest on your head too much. The clamping force of the earcups keeps them in place (although you won't want to headbang too much.) The weight will send them careening across the floor.</p><p>ANC is good, and the sound is excellent. They're very spacious in presentation and extremely detailed. Spatial Audio is also great, and very well implemented into the headphones if you're <a href="https://www.tomsguide.com/entertainment/music-streaming/i-just-ditched-spotify-for-apple-music-and-these-3-unique-features-already-have-me-hooked">an Apple Music listener</a>. Head tracking still makes me feel a little sick, but your mileage may vary.</p><p>20 hours of battery isn't great, but they charge quickly through the USB-C port. I have a big soft spot for the AirPods Max these days, especially thanks to their USB-C audio mode, which provides even higher-quality listening. This is a great deal as well — although not their lowest price, it's a rare opportunity to grab one of Apple's top-shelf products for a little bit less.</p>
                                                            </article>
                            ]]>
                        </content:encoded>
                                                </item>
                                <item>
                                                            <title><![CDATA[ Not a typo! AirPods Pro 2 just crashed to $139 on Walmart — save 40% right now ]]></title>
                                                                                                                                                                                                <link>https://www.tomsguide.com/audio/airpods/not-a-typo-airpods-pro-2-just-crashed-to-usd139-save-40-percent-right-now</link>
                                                                            <description>
                            <![CDATA[ Walmart's early Black Friday sale sees the Apple AirPods Pro 2 discounted to just $139. That's budget earbuds pricing for a premium set of buds, so sign me up! ]]>
                                                                                                            </description>
                                                                                                                                <guid isPermaLink="false">MsuBpidureoNBzTgMVvHm</guid>
                                                                                                <enclosure url="https://cdn.mos.cms.futurecdn.net/43tPRbZP8EgiWTA7k8Rxhn-1280-80.jpg" type="image/jpeg" length="0"></enclosure>
                                                                        <pubDate>Fri, 14 Nov 2025 14:53:18 +0000</pubDate>                                                                                                                                <updated>Fri, 14 Nov 2025 15:00:25 +0000</updated>
                                                                                                                                            <category><![CDATA[Airpods]]></category>
                                                    <category><![CDATA[Audio]]></category>
                                                    <category><![CDATA[Headphones]]></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 senior 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. She has a strong interest in audio gear and the music world. &lt;/p&gt;&lt;p&gt;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 novels, or stressing over NYT Games.&lt;/p&gt; ]]></dc:description>
                                                                                                                                <cf:isSponsored>false</cf:isSponsored>
                <cf:hasAffiliateLinks>false</cf:hasAffiliateLinks>
                <cf:isPaid>false</cf:isPaid>
                                                                                                                                <media:content type="image/jpeg" url="https://cdn.mos.cms.futurecdn.net/43tPRbZP8EgiWTA7k8Rxhn-1280-80.jpg">
                                                            <media:credit><![CDATA[Future]]></media:credit>
                                                                                                                                                                                                                                    <media:description><![CDATA[AirPods Pro 2 with Cyber Monday deal tag]]></media:description>                                                            <media:text><![CDATA[AirPods Pro 2 with Cyber Monday deal tag]]></media:text>
                                <media:title type="plain"><![CDATA[AirPods Pro 2 with Cyber Monday deal tag]]></media:title>
                                                    </media:content>
                                                    <media:thumbnail url="https://cdn.mos.cms.futurecdn.net/43tPRbZP8EgiWTA7k8Rxhn-1280-80.jpg" />
                                                                                                                                                                    <content:encoded >
                            <![CDATA[
                            <article>
                                <p>As a professional audio reviewer, I get my hands on a lot of earbuds. I test everything from $300 audiophile earbuds to $25 super-cheap models. But only one pair of earbuds has a permanent place on my roster.</p><p>The Apple AirPods Pro 2. Although they've been officially discontinued, they still perform like the premium buds they are. Right now, you can grab the <a href="https://www.walmart.com/ip/Apple-AirPods-Pro-2-Wireless-Earbuds-Active-Noise-Cancellation-Hearing-Aid-Feature/5689919121" target="_blank" rel="nofollow">AirPods Pro 2 for $139 at Walmart</a>. This is one of the <a href="https://www.tomsguide.com/sales-events/amazon-black-friday-sale-2025-dates-best-early-deals-what-to-expect" target="_blank">best early Black Friday deals</a> I've seen thus far.</p><p>This price is unlikely to last long. I get the feeling that Walmart is trying to shift the last of its AirPods Pro 2 stock. Even so, these are the earbuds that I personally choose to use, even though I have access to the newer Pro 3 and loads of other audiophile-approved earbuds. I'd grab a pair of the AirPods Pro 2 at this unbelievably low price while you still can. </p><div class="product"><a data-dimension112="1e7e4a7f-9335-4df8-8b87-34a5598b70da" data-action="Deal Block" data-label="I love my AirPods Pro 2. I use them every single day. The sound quality is phenomenal, the fit is great for small ears (but come with L tip sizes if you have larger ears), and you get a plethora of features like Dolby Atmos-powered Spatial Audio, and hearing tests." data-dimension48="I love my AirPods Pro 2. I use them every single day. The sound quality is phenomenal, the fit is great for small ears (but come with L tip sizes if you have larger ears), and you get a plethora of features like Dolby Atmos-powered Spatial Audio, and hearing tests." data-dimension25="$139" href="https://www.walmart.com/ip/Apple-AirPods-Pro-2-Wireless-Earbuds-Active-Noise-Cancellation-Hearing-Aid-Feature/5689919121" 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="7xQgJs4SWfQkEL6d3yZ22h" name="Apple AirPods Pro 2" caption="" alt="" src="https://cdn.mos.cms.futurecdn.net/7xQgJs4SWfQkEL6d3yZ22h.jpg" mos="" align="middle" fullscreen="" width="1080" height="1080" attribution="" endorsement="" credit="" class=""></p></div></div></figure></a><p>I love my AirPods Pro 2. I use them every single day. The sound quality is phenomenal, the fit is great for small ears (but come with L tip sizes if you have larger ears), and you get a plethora of features like Dolby Atmos-powered Spatial Audio, and hearing tests. <a class="view-deal button" href="https://www.walmart.com/ip/Apple-AirPods-Pro-2-Wireless-Earbuds-Active-Noise-Cancellation-Hearing-Aid-Feature/5689919121" target="_blank" rel="nofollow" data-dimension112="1e7e4a7f-9335-4df8-8b87-34a5598b70da" data-action="Deal Block" data-label="I love my AirPods Pro 2. I use them every single day. The sound quality is phenomenal, the fit is great for small ears (but come with L tip sizes if you have larger ears), and you get a plethora of features like Dolby Atmos-powered Spatial Audio, and hearing tests." data-dimension48="I love my AirPods Pro 2. I use them every single day. The sound quality is phenomenal, the fit is great for small ears (but come with L tip sizes if you have larger ears), and you get a plethora of features like Dolby Atmos-powered Spatial Audio, and hearing tests." data-dimension25="$139">View Deal</a></p></div><p>I'm wearing my AirPods Pro 2 as I type this, so you know they're the real deal. Even though I test tons of the best earbuds and I'm always getting my hands on new audio tech, I can't quit my AirPods Pro 2. </p><p>If that doesn't speak for itself, I don't know what will. </p><p>I love my AirPods Pro 2 so much that I use them <em>instead of </em>the new AirPods Pro 3. I have a pair of the 3 as well, but I still go for the 2 every single day. For me, the Pro 2 fit better than the Pro 3, so if you have smaller ears or narrower ear canals, you will likely be better off with the older model. </p><p>That brings me to age. Even though the AirPods Pro 2 are a couple of years old now and they're officially discontinued, they're still premium, market-leading earbuds. The sound quality rivals some of the <a href="https://www.tomsguide.com/us/best-wireless-earbuds,review-6160.html">best earbuds</a> of 2025, like the <a href="https://www.tomsguide.com/audio/earbuds/bose-quietcomfort-ultra-earbuds-2-review">Bose QuietComfort Ultra earbuds Gen 2</a>. </p><p>As I said earlier, I have the AirPods Pro 3 and the Pro 2. For me, the sound quality difference is negligible, even when I'm listening with the <a href="https://www.tomsguide.com/buying-guide/best-music-streaming-services">best music streaming services</a> like <a href="https://www.tomsguide.com/audio/qobuz-review">Qobuz</a>. The Pro 2 have dynamic, punchy bass, and melodic, emotive treble, all layered over a nuanced yet balanced midrange. The instrument separation is near-unbeatable. 100% unbeatable at this discounted price point. </p><p>No earbuds with an $139 MSRP perform as well as the AirPods Pro 2. I've tested buds like the <a href="https://www.tomsguide.com/audio/earbuds/skullcandy-method-360-anc-review">Skullcandy x Bose Method 360 ANC</a>, which I loved considering the price point of $129, but they are nowhere near as good as the MSRP-$249 AirPods Pro 2.  </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>
            </channel>
</rss>